我开发了一个 winforms,向用户展示一个使用 3D 渲染的 Web 应用程序(使用 THREEJS)。问题是并非每个客户端都有足够好的 CPU 来使用此应用程序。当通过浏览器访问该应用程序时,该应用程序几乎在每台计算机上都能顺利运行,但通过 winforms 应用程序访问它时则不然。这是每个程序的CPU占用率:
相同的内容在 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?
首先您需要启用 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 不同。
我目前正在做一个类似的项目,如果我们连接起来是不是很酷?