CefSharp WPF和屏幕外性能

问题描述 投票:0回答:1

我正在尝试支持使用cefsharp(v79.1.360)的应用程序。

有一些我需要实现的事情清单:

1)WPF中的ChromiumWebBrowser(使用CefSharp.Wpf最小示例)

2)此浏览器可以退出屏幕(带有折叠窗口或关闭窗口)

3)使用JavaScriptObjectRepository,并启动将与网页一起工作的一些代码(单击按钮,更改元素的文本)。页面可能使用框架,websocket,Http请求和其他内容网页通常可以。

完成页面工作后,我通过调用对象的方法将结果发送到C#,并绑定到jsObjectRepository /

期望:

离屏性能(时间延迟)应与打开窗口的时间一样/

现实:

屏幕外性能有时确实很差,最多需要10秒钟才能完成工作(wpf只有1-5时。)>

我的代码:

初始化

CefSharpSettings.LegacyJavascriptBindingEnabled = true;
            CefSharpSettings.WcfEnabled = true;

            CefSettings cefSettings = new CefSettings
            {
                LocalesDirPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "locales"),
                Locale = appsettings.CurrentChromeLanguage.ToLocal(),
                AcceptLanguageList = appsettings.CurrentChromeLanguage.ToAcceptList(),
            };


            if (!cefSettings.CefCommandLineArgs.ContainsKey("disable-gpu"))
            {
                cefSettings.CefCommandLineArgs.Add("disable-gpu", "1");
            }
            if (cefSettings.CefCommandLineArgs.ContainsKey("enable-system-flash"))
            {
                cefSettings.CefCommandLineArgs.Remove("enable-system-flash");
            }
            if (cefSettings.CefCommandLineArgs.ContainsKey("enable-media-stream"))
            {
                cefSettings.CefCommandLineArgs.Remove("enable-media-stream");
            }


            cefSettings.CefCommandLineArgs.Add("enable-begin-frame-scheduling", "1");
            cefSettings.CefCommandLineArgs.Add("disable-gpu-vsync", "1");

            cefSettings.CefCommandLineArgs.Add("mute-audio", "true");
            cefSettings.CefCommandLineArgs.Add("enable-media-stream", "0");
            cefSettings.CefCommandLineArgs.Add("disable-3d-apis", "1");
            cefSettings.CefCommandLineArgs.Add("renderer-process-limit", "10");

            cefSettings.CefCommandLineArgs.Add("js-flags", "--lite_mode");


            if (!appsettings.IsLoadImage)
            {
                cefSettings.CefCommandLineArgs.Add("disable-image-loading", "1");
            }
            cefSettings.LogFile = Path.Combine(ClientConfig.ChromeDataPath, "Log.txt");
            cefSettings.LogSeverity = LogSeverity.Error;
            cefSettings.IgnoreCertificateErrors = true;


            cefSettings.SetOffScreenRenderingBestPerformanceArgs();

浏览器的创建和使用:

ChromiumWebBrowser browser = new ChromiumWebBrowser();

//xaml window with <ContentControl> with browser
//need hide means when window is closing, we cancel it, and using Hide()
NewBrowserView view = new NewBrowserView(new ChromeTabViewModel(browser));

view.Closing += BrowserView_Closing;
Browser.FrameLoadStart += _browser_FrameLoadStart;
var options = new BindingOptions { CamelCaseJavascriptNames = false };
browser.JavascriptObjectRepository.Register("resultController", this, false, options);


//we can just hide window
void BrowserView_Closing(object sender, CancelEventArgs e)
{
            if (_needHide)
            {
                e.Cancel = true;
                Hide();
            }
}

//on page load
void _browser_FrameLoadStart(object sender, FrameLoadStartEventArgs e) {
  string code = "";
  code += "(async function(){ " +
  "await CefSharp.BindObjectAsync('resultController'); " +
  code += TestJsCode;
  code += " })();";//AddWorker
  e.Frame.ExecuteJavaScriptAsync(code, $"about:blank/myCode");
  Consol.WriteLine(DateTime.Now);
}

public void OnGoodResult()
{
 Consol.WriteLine(DateTime.Now);
}

public void OnBadResult()
{
  Consol.WriteLine(DateTime.Now);
}

//then i just go by differnet pages and await results    

正如我之前提到的,当我隐藏wnd时,打印结果花费的时间太长

我正在尝试支持使用cefsharp(v79.1.360)的应用程序。我需要实现的清单如下:1)WPF中的ChromiumWebBrowser(使用CefSharp.Wpf最小示例)2)此浏览器可以运行...

c# wpf cefsharp chromium-embedded
1个回答
0
投票

我确实依赖于Layouts和其他视觉效果,所以我明白了。当窗口崩溃时,我应该设置此代码:

© www.soinside.com 2019 - 2024. All rights reserved.