如何在WinForms中优化CEFSharp以渲染繁重的应用程序(例如THREEJS)?

How to optimize CEFSharp in WinForms to render heavy applications (such as THREEJS)?

提问人:Lucas Miyazaki 提问时间:6/16/2022 最后编辑:Lucas Miyazaki 更新时间:6/21/2022 访问量:479

问:

我开发了一个winforms,向用户展示一个使用3D渲染(带有THREEJS)的Web应用程序。问题在于,并非每个客户端都有足够好的 CPU 来使用此应用程序。通过浏览器访问该应用程序时,该应用程序几乎在每台计算机上都能流畅运行,但在通过 winforms 应用程序访问它时却无法正常运行。这是每个程序的 CPU 使用率:enter image description here

在 Google Chrome 上运行时,相同的内容使用 2.3% 的 CPU,而运行 CEFSharp 的 winforms 应用程序使用 92.7%。

这是我的winforms组件的代码:

namespace tissuewebs
{
    public partial class Form1 : Form
    {
        public ChromiumWebBrowser chromeBrowser;
           
        public Form1()
        {
            InitializeComponent();
            InitializeChromium();             
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
        }

        private void InitializeChromium()
        {
            CefSettings settings = new CefSettings();
            settings.CefCommandLineArgs.Add("disable-features", "BlockInsecurePrivateNetworkRequests");
            settings.CefCommandLineArgs.Add("disable-gpu", "1");
            settings.RemoteDebuggingPort = 8088;
            settings.CachePath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\CEF";
            settings.PersistSessionCookies = true;
            CefSharp.Cef.Initialize(settings);

            chromeBrowser = new ChromiumWebBrowser("example.com")
            {
                Dock = DockStyle.Fill
            };
            this.Controls.Add(chromeBrowser);
        }
    }
}

是否可以优化我的应用程序,使其使用更少的 CPU?

Winforms 三.js cefsharp

评论


答:

1赞 amaitland 6/16/2022 #1
  • 首先,您需要启用 GPU 加速。禁用 GPU 加速的 CPU 使用率会更高。

  • 其次,使用 64 位版本以获得更好的性能。您正在将作为 64 位进程运行的 Chrome 与 32 位应用程序进行比较。

  • 第三,您需要确保应用程序具有具有兼容性条目的 app.manifest。否则,性能将受到不利影响。

<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!-- A list of all Windows versions that this application is designed to work with. 
            Windows will automatically select the most compatible environment.-->

      <!-- Windows 7 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />
      <!-- Windows 8 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />
      <!-- Windows 8.1 -->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
      <!-- Windows 10 -->
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
    </application>
  </compatibility>

有关参考示例,请参阅 https://github.com/cefsharp/CefSharp.MinimalExample/blob/master/CefSharp.MinimalExample.WinForms/app.manifest。我还建议确保您的应用程序具有 DPI 感知能力。


将您的应用程序与 Chrome 进行比较时,请务必确保将类似版本进行比较。例如,Chrome 102 的性能可能与 CefSharp 100 不同。