使用 WebBrowser 控件时 IE 11 WebGL 性能变慢

Posted

技术标签:

【中文标题】使用 WebBrowser 控件时 IE 11 WebGL 性能变慢【英文标题】:IE 11 WebGL performance slow when using WebBrowser control 【发布时间】:2014-09-22 22:27:55 【问题描述】:

我正在尝试将 Cesium 嵌入到 WinForms 或 WPF 应用程序(使用 IE 11)内的 WebBrowser 控件中。作为测试,我正在使用此链接:

http://cesiumjs.org/Cesium/Build/Apps/CesiumViewer/index.html?stats=true

它“有效”,但比直接使用 IE 11 慢得多。在 IE 11 中,一切都以 60fps 运行;在带有 WebBrowser 控件的简单 WPF 或 WinForms 应用程序中,它以 4-6 fps 的速度运行。我一直无法找到问题的原因。这是一个空白的表单或 WPF 面板,其中 WebBrowser 控件设置为填充整个窗格。没有我能想象的透明度或其他问题。我注意到在 Visual Studio 嵌入式浏览器中访问上述链接具有相同的效果。 WebBrowser 控制不是 JIT javascript 吗?是 WebGL 问题吗?有没有办法可以调试它以找出发生了什么?任何帮助将不胜感激。

【问题讨论】:

您应该在这个问题中添加WebGL 标签。 【参考方案1】:

看看这个article:

事实证明,嵌入式浏览器通过以下方式使用 IE7 渲染引擎 默认情况下,即使安装了较新版本的 IE。此外,GPU 渲染已关闭,因此浏览器使用软件渲染 仅限。

通过设置以下feature control registry keys 已解决此问题:

FEATURE_BROWSER_EMULATION – 设置为所需的 IE 版本 渲染引擎 FEATURE_GPU_RENDERING – 设置为 1 以启用 GPU 渲染。

这些键可以在 HKEY_LOCAL_MACHINE 或 HKEY_CURRENT_USER 用于特定程序(可执行名称),它使用 嵌入式浏览器。 HKCU 是首选,因为该程序不需要 写入 HKCU 的管理员权限。

所以当我将 FEATURE_BROWSER_EMULATION 设置为 10000(对于 IE10)并设置 FEATURE_GPU_RENDERING 为 1,性能提高到 ~850 鱼@ 60 帧/秒。仍然不如拥有 1000 多个鱼的独立 IE,但是 进步很大!

【讨论】:

好文章!我要补充一点,仿真部分可以由带有<meta http-equiv="X-UA-Compatible" content="IE=Edge"> 的HTML 头块控制。我很想知道是否有人找到了一种非注册方式来启用 GPU 渲染。 我已经知道 FEATURE_BROWSER_EMULATION 和 FEATURE_GPU_RENDERING。很抱歉我没有提到这一点。它们似乎都对 WebGL 内容没有任何影响,或者对 IE 11 没有影响(这也在 Windows 8.1 更新上)。我已设置所有建议的注册表项,但问题仍然存在。我知道我没有使用 IE7 引擎,因为 WebGL 可以工作(并且页面被标记为 IE=Edge)。这里需要缺少其他东西。 我要补充一点,要记住的另一件事是该文章讨论了本机 C++ 应用程序。虽然我知道底层的 WebBrowser 控件实际上是 ActiveX 控件的包装器;无法保证相同的规则适用于 .NET 应用程序。 实际上,我刚刚开始工作!事实证明,由于某种原因,HKLM 无法正常工作,而 HKCU 可以。我将不得不进行更多实验,但这是向前迈出的一大步。一直以来,我一直在本地机器上设置所有这些键。【参考方案2】:

您需要更改这两个 reg 键以使其适用于所有用户

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

对于单个用户只需使用

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION

添加 DWORD 确保您将值设置为 11999 而不是 11001,如下面的链接所述,它应该将其设置为 IE 11 标准模式。虽然它认为使用无效值会将其设置为最新的,但将其设置为 99999 可能会适用于下一个版本。

http://weblog.west-wind.com/posts/2011/May/21/Web-Browser-Control-Specifying-the-IE-Version

【讨论】:

用户 DWORD 12001 以 Windows 10 中的浏览器为目标,因为 11001 由于某种原因无法正常工作。

以上是关于使用 WebBrowser 控件时 IE 11 WebGL 性能变慢的主要内容,如果未能解决你的问题,请参考以下文章

使用 WPF WebBrowser 控件时如何抑制脚本错误?

winform webbrowser如何强制使用ie11内核?

使用 IE9 的 WebBrowser 控件

WebBrowser控件是浏览器啥版本

WebBrowser控件默认使用IE9,IE10的方法

为IE内核的WebBrowser控件内存泄漏所烦恼的可以考虑用Cefsharp代替它!