1

我正在使用 .NET WebBrowser Control (2.0) 在我的应用程序中查看 Internet 上的网站——效果很好!不幸的是,我们发现了一个巨大的缺点:速度。据我所知,该控件的性能始终如一JavaScript 性能不佳(在 sunspider 中为 6000 毫秒以上,而在 IE10 中为 150 毫秒)。这也可以通过使用 Maxthon 浏览器的“Retro”模式、一个最小的工作示例(即一个仅包含浏览器而没有其他逻辑的简单表单)和 Visual Studio 的内置浏览器来验证——它们都表现得同样糟糕。它们都使用 IE10 版本的控件(通过注册表打开),因此理论上可以预期类似的性能,或者我们认为。使用 Spy++ 查看 IE10 和使用托管控件的程序之间的差异,可以找到 Shell DocObject View 的附加包装器:ShellEmbedding。

http://imgur.com/csUDdaU在DesktopGap 托管的WebBrowser 控件的下部显示了包装器,而在上部没有ShellEmbedding 的情况下可以看到IE 的浏览器窗口。

我相信,这是造成性能不佳的原因——但我既不知道解决这个问题的方法,也没有任何好的来源——这让我想到了我的问题:

有没有办法加快 WebBrowser 控件的性能?

到目前为止,我们的主要想法是以某种方式移除 ShellEmbedding 并直接实例化 Shell DocObject View(如果可能);GPU_RENDERING 已启用且 IE10 模式处于活动状态 ( http://msdn.microsoft.com/en-us/library/ee330731%28v=VS.85%29.aspx )。

此外,CSS 处理似乎也比 IE 更差,所以可能有联系。

干杯,

克劳斯

4

2 回答 2

0

在尝试在其他 PC 上重现该问题后,似乎我的 PC - 或者更具体地说是我的用户配置文件 - 是问题所在。然而,我们无法弄清楚为什么会出现这种情况,因此只需将其重置,WebBrowser 的性能就会再次处于可接受的水平。

感谢您的努力;)

于 2013-05-27T08:19:35.187 回答
0

我的建议是检查您是否使用了正确的 doctype 指令或正确的浏览器仿真模式。

我还在使用 WebBrowser 组件并通过注册表强制它使用 IE10 模式,而不管 doctype 指令如何(将“HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\myexe.exe”设置为 DWORD 10001(十进制)。

测试了这个html页面,看看js速度是否有差异:

<!doctype html>
<html>
<head>
<script>
    var tick, tock;
    function start() {
        tick = Date.now();
        for (var i = 0; i < 10000; ++i) {
            var span = document.createElement('span');
            testDiv.appendChild(span);
            testDiv.removeChild(span);
        }
        tock = Date.now();
        alert(tock - tick);
    }
</script>
</head>
<body>
    <button onclick="start();">Click to start</button>
    <div id="testDiv"></div>
</body>
</html>

在我的电脑上,我得到以下结果: IE10: ~430ms WebBrowser app: ~470ms Chrome: 48ms

如您所见,在我的测试中,IE10 和 WebBrowser 应用程序之间似乎几乎没有区别。不同之处可能在于应用程序并行执行其他 CPU 处理,这可能需要几毫秒。但是,与铬的差异是 10 倍,这非常了不起。

问候,大卫

于 2013-05-23T08:49:44.550 回答