C# CefSharp 内存管理
C# CefSharp Memory Management
我在我的 C# Winform 应用程序 (.NET 4.5.2) 中使用 CefSharp Winforms (v57.0.0),它运行良好...
由于我要多次访问站点,CEF浏览器进程占用大量内存!我已经在文档和其他论坛上进行了研究,但我没有得到满意的答案...... "best" 解决方案,到目前为止,是重新启动程序。
有什么方法可以 "clear" CEF 浏览器进程的内存使用而无需重新启动我的程序?
按照Cef初始化的代码:
CefSettings settings = new CefSettings();
settings.CachePath = Program.CACHE_PATH; // cache path
settings.IgnoreCertificateErrors = true;
settings.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36";
settings.PersistSessionCookies = false;
// Initialize cef with the provided settings
bool initialized = false;
string cefError = string.Empty;
try
{
Thread.Sleep(1000);
initialized = Cef.Initialize(settings, true, null);
}
catch (Exception ex)
{
cefError = ex.InnerException == null ? ex.Message : ex.InnerException.InnerException == null ? ex.InnerException.Message : ex.InnerException.InnerException.Message;
}
if (!initialized)
{
// ERROR! => FINISH PROGRAM
// ...
return;
}
// Cookies path
Cef.GetGlobalCookieManager().SetStoragePath(Program.COOKIES_PATH, false);
// Create a browser component
webBrowser = new ChromiumWebBrowser("about:blank");
webBrowser.Name = "WebBrowser";
webBrowser.TabIndex = 0;
webBrowser.BrowserSettings.ApplicationCache = CefState.Disabled;
webBrowser.BrowserSettings.FileAccessFromFileUrls = CefState.Enabled;
webBrowser.BrowserSettings.UniversalAccessFromFileUrls = CefState.Enabled;
webBrowser.BrowserSettings.ImageLoading = CefState.Disabled;
webBrowser.BrowserSettings.Javascript = CefState.Enabled;
webBrowser.BrowserSettings.WebSecurity = CefState.Disabled;
webBrowser.KeyboardHandler = new BrowserChrome.KeyboardHandler(); // prevent keyboard
webBrowser.JsDialogHandler = new BrowserChrome.JsHandler(); // prevent alerts
// Add to tab (tabBrowser is a TabPage)
tabBrowser.Controls.Add(webBrowser);
webBrowser.Dock = DockStyle.Fill;
程序结束的地方有以下代码:
Cef.Shutdown();
正如 amaitland 所提到的,CefSharp 57 版中存在一个错误。幸运的是,最近发布的 63 版本解决了这个问题。
我在我的 C# Winform 应用程序 (.NET 4.5.2) 中使用 CefSharp Winforms (v57.0.0),它运行良好...
由于我要多次访问站点,CEF浏览器进程占用大量内存!我已经在文档和其他论坛上进行了研究,但我没有得到满意的答案...... "best" 解决方案,到目前为止,是重新启动程序。
有什么方法可以 "clear" CEF 浏览器进程的内存使用而无需重新启动我的程序?
按照Cef初始化的代码:
CefSettings settings = new CefSettings();
settings.CachePath = Program.CACHE_PATH; // cache path
settings.IgnoreCertificateErrors = true;
settings.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36";
settings.PersistSessionCookies = false;
// Initialize cef with the provided settings
bool initialized = false;
string cefError = string.Empty;
try
{
Thread.Sleep(1000);
initialized = Cef.Initialize(settings, true, null);
}
catch (Exception ex)
{
cefError = ex.InnerException == null ? ex.Message : ex.InnerException.InnerException == null ? ex.InnerException.Message : ex.InnerException.InnerException.Message;
}
if (!initialized)
{
// ERROR! => FINISH PROGRAM
// ...
return;
}
// Cookies path
Cef.GetGlobalCookieManager().SetStoragePath(Program.COOKIES_PATH, false);
// Create a browser component
webBrowser = new ChromiumWebBrowser("about:blank");
webBrowser.Name = "WebBrowser";
webBrowser.TabIndex = 0;
webBrowser.BrowserSettings.ApplicationCache = CefState.Disabled;
webBrowser.BrowserSettings.FileAccessFromFileUrls = CefState.Enabled;
webBrowser.BrowserSettings.UniversalAccessFromFileUrls = CefState.Enabled;
webBrowser.BrowserSettings.ImageLoading = CefState.Disabled;
webBrowser.BrowserSettings.Javascript = CefState.Enabled;
webBrowser.BrowserSettings.WebSecurity = CefState.Disabled;
webBrowser.KeyboardHandler = new BrowserChrome.KeyboardHandler(); // prevent keyboard
webBrowser.JsDialogHandler = new BrowserChrome.JsHandler(); // prevent alerts
// Add to tab (tabBrowser is a TabPage)
tabBrowser.Controls.Add(webBrowser);
webBrowser.Dock = DockStyle.Fill;
程序结束的地方有以下代码:
Cef.Shutdown();
正如 amaitland 所提到的,CefSharp 57 版中存在一个错误。幸运的是,最近发布的 63 版本解决了这个问题。