当ChromiumWebBrowser处置时CefSharp.BrowserSubprocess未关闭
我在WPF中使用CefSharp 55。每次我做一个新的ChromiumWebBrowser
时,一个新的CefSharp.BrowserSubprocess.exe出现在任务管理器中,这是正常的。但是当我通过ChromiumWebBrowser
致电Dispose()
时,它们不会消失。当我关闭Apllication时,它们只会消失,因为那时我打电话给Cef.Shutdown()
。我试图在处置后强制GC,但我什么也没变。当ChromiumWebBrowser处置时CefSharp.BrowserSubprocess未关闭
因此,如果用户不断打开和关闭网页浏览器中的标签,我们最终会运行很多CefSharp.BrowserSubprocess,当应用程序关闭时,它将永远不会关闭。
在扩展ChromiumWebBrowser
类的构造函数,我做
var requestContextSettings = new RequestContextSettings
{
PersistSessionCookies = false,
IgnoreCertificateErrors = true
};
RequestContext = new RequestContext(requestContextSettings);
当我处理了浏览器,就
browser.Dispose();
browser.RequestContext.Dispose()
难道我忘了什么事?
编辑
显然,它的问题并不局限于CefSharp.BrowserSubprocess。当我处理浏览器播放YouTube视频时,视频的声音仍在运行。之前正在工作,视频声音在处置后被切断。也许这是我最近更新的新版CefSharp中的一个错误。
我发现问题所在。我做了一个ILifeSpanHandler
的实现,其中我在DoClose(...)
中返回true,因为我通过返回true表示您告诉浏览器它可以关闭。但是在文档中它表示立即返回false以立即销毁浏览器。
(https://github.com/cefsharp/CefSharp/blob/master/CefSharp/Handler/ILifeSpanHandler.cs)
这样做后,当我关闭相应的Web浏览器CefSharp.BrowserSubprocess关闭。
您不必担心。阅读[this](https://bitbucket.org/chromiumembedded/cef/wiki/GeneralUsage#markdown-header-processes) – Amogh
我阅读** Process **部分。它解释说,多重过程将会产生,但它并没有说它们是否正常,直到应用程序关闭时才会保持活跃状态。 我做了一个测试,我不断打开并关闭Web浏览器选项卡。我很快得到了内存不足的崩溃。 我们的应用程序应该整天运行而不会重新启动。它不会持续到一天结束。 – Gael