如果应用程序崩溃,CefSharp.BrowserSubprocess 会以高 CPU 运行

Jam*_*esD 0 cefsharp

我正在使用优秀的CefSharp项目(版本 67)在我们的 WPF 应用程序中托管浏览器。

使用 CefSharp 会导致CefSharp.BrowserSubprocess启动子进程,这是设计使然。

如果我干净地退出我的应用程序并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();
}
Run Code Online (Sandbox Code Playgroud)

我注意到,如果应用程序被终止,CefSharp.BrowserSubprocess负责渲染的将继续运行并开始使用大量CPU,并且会无限期地这样做。

我可以添加一些代码来处理这个问题,检查任何孤立的CefSharp.BrowserSubprocess进程,然后杀死它们。我想知道是否有更好的选择?

如果进程本身可以执行周期检查并自行终止,这可能是一种设置,那就太好了。

Jam*_*esD 5

正如@amaitland 所回答的,应该设置以下设置来监视父进程:

CefSharpSettings.SubprocessExitIfParentProcessClosed = true;