CefSharp.BrowserSubprocess 在处理 ChromiumWebBrowser 时未关闭
CefSharp.BrowserSubprocess are not closed when ChromiumWebBrowser is Disposed
我在 WPF 中使用 CefSharp 55。每次我新建一个ChromiumWebBrowser
,任务管理器里都会出现一个新的CefSharp.BrowserSubprocess.exe,这是正常的。但是当我在 ChromiumWebBrowser
上调用 Dispose()
时它们并没有消失。它们只会在我关闭应用程序时消失,可能是因为那时我调用了 Cef.Shutdown()
。我试图在处理后强制 GC,但我什么也没改变。
因此,如果用户不断在网络浏览器中打开和关闭选项卡,我们最终会得到很多 CefSharp.BrowserSubprocess 运行,除非应用程序关闭,否则它们永远不会关闭。
在 class 扩展 ChromiumWebBrowser
的构造函数中,我做
var requestContextSettings = new RequestContextSettings
{
PersistSessionCookies = false,
IgnoreCertificateErrors = true
};
RequestContext = new RequestContext(requestContextSettings);
当我配置浏览器时,做
browser.Dispose();
browser.RequestContext.Dispose()
我是不是忘记了什么?
编辑
显然问题不仅限于 CefSharp.BrowserSubprocess。当我配置浏览器播放 youtube 视频时,视频的声音仍然是 运行。之前是可以用的,处理后视频声音被切断了。可能是我最近更新的新版CefSharp的bug。
我找到问题所在了。我实现了 ILifeSpanHandler
,我在 DoClose(...)
中 return 为真,因为我虽然 return 为真意味着你告诉浏览器它可以关闭。但是在文档中它说 return false 立即销毁浏览器。
(https://github.com/cefsharp/CefSharp/blob/master/CefSharp/Handler/ILifeSpanHandler.cs)
执行此操作后,当我关闭相应的网络浏览器时,CefSharp.BrowserSubprocess也会关闭。
我在 WPF 中使用 CefSharp 55。每次我新建一个ChromiumWebBrowser
,任务管理器里都会出现一个新的CefSharp.BrowserSubprocess.exe,这是正常的。但是当我在 ChromiumWebBrowser
上调用 Dispose()
时它们并没有消失。它们只会在我关闭应用程序时消失,可能是因为那时我调用了 Cef.Shutdown()
。我试图在处理后强制 GC,但我什么也没改变。
因此,如果用户不断在网络浏览器中打开和关闭选项卡,我们最终会得到很多 CefSharp.BrowserSubprocess 运行,除非应用程序关闭,否则它们永远不会关闭。
在 class 扩展 ChromiumWebBrowser
的构造函数中,我做
var requestContextSettings = new RequestContextSettings
{
PersistSessionCookies = false,
IgnoreCertificateErrors = true
};
RequestContext = new RequestContext(requestContextSettings);
当我配置浏览器时,做
browser.Dispose();
browser.RequestContext.Dispose()
我是不是忘记了什么?
编辑
显然问题不仅限于 CefSharp.BrowserSubprocess。当我配置浏览器播放 youtube 视频时,视频的声音仍然是 运行。之前是可以用的,处理后视频声音被切断了。可能是我最近更新的新版CefSharp的bug。
我找到问题所在了。我实现了 ILifeSpanHandler
,我在 DoClose(...)
中 return 为真,因为我虽然 return 为真意味着你告诉浏览器它可以关闭。但是在文档中它说 return false 立即销毁浏览器。
(https://github.com/cefsharp/CefSharp/blob/master/CefSharp/Handler/ILifeSpanHandler.cs)
执行此操作后,当我关闭相应的网络浏览器时,CefSharp.BrowserSubprocess也会关闭。