如果应用程序崩溃,CefSharp.BrowserSubprocess 将保持 运行 高 CPU
CefSharp.BrowserSubprocess is left running with high CPU if app crashes
我正在使用出色的 CefSharp 项目(版本 67)在我们的 WPF 应用程序中托管浏览器。
使用 CefSharp 会导致子 CefSharp.BrowserSubprocess
进程启动,这是设计使然。
如果我完全退出我的应用程序并按照 documentation:
中的建议调用 Cef.Shutdown()
,这些进程将停止
// Hook up handler earlier in application
Application.Current.Exit += OnApplicationExit;
...
private void OnApplicationExit(object sender, ExitEventArgs e)
{
if (Dispatcher.CheckAccess() == false)
{
Dispatcher.Invoke(() => OnApplicationExit(sender, e));
return;
}
// Stops CefSharp.BrowserSubprocess processes
Cef.Shutdown();
}
我注意到,如果应用程序被终止,负责渲染的 CefSharp.BrowserSubprocess
会留下 运行 并开始使用 lot 34=] 并无限期地这样做。
我可以添加一些代码来处理这个问题,检查任何孤立的 CefSharp.BrowserSubprocess
进程,然后终止它们。不过我想知道是否有更好的选择?
如果进程本身可以执行周期检查并自行终止,也许作为一个设置,那就太好了。
正如@amaitland 所回答的,应该设置以下设置来监视父进程:
CefSharpSettings.SubprocessExitIfParentProcessClosed = true;
我正在使用出色的 CefSharp 项目(版本 67)在我们的 WPF 应用程序中托管浏览器。
使用 CefSharp 会导致子 CefSharp.BrowserSubprocess
进程启动,这是设计使然。
如果我完全退出我的应用程序并按照 documentation:
中的建议调用Cef.Shutdown()
,这些进程将停止
// Hook up handler earlier in application
Application.Current.Exit += OnApplicationExit;
...
private void OnApplicationExit(object sender, ExitEventArgs e)
{
if (Dispatcher.CheckAccess() == false)
{
Dispatcher.Invoke(() => OnApplicationExit(sender, e));
return;
}
// Stops CefSharp.BrowserSubprocess processes
Cef.Shutdown();
}
我注意到,如果应用程序被终止,负责渲染的 CefSharp.BrowserSubprocess
会留下 运行 并开始使用 lot 34=] 并无限期地这样做。
我可以添加一些代码来处理这个问题,检查任何孤立的 CefSharp.BrowserSubprocess
进程,然后终止它们。不过我想知道是否有更好的选择?
如果进程本身可以执行周期检查并自行终止,也许作为一个设置,那就太好了。
正如@amaitland 所回答的,应该设置以下设置来监视父进程:
CefSharpSettings.SubprocessExitIfParentProcessClosed = true;