我正在使用.NET WebBrowser Control(2.0)在我的应用程序中查看Internet上的网站 - 这很好用!不幸的是,我们发现了一个巨大的缺点:速度。据我所知,控件在JavaScript中表现不佳非常(在sunspider中为6000ms +在IE10中为150ms)。这也可以通过使用Maxthon浏览器的“Retro”模式来验证,这是最小的工作示例(即只包含浏览器而不包含其他逻辑的简单形式),以及Visual Studio的内置浏览器 - 它们都表现同样糟糕。所有这些都使用IE10版本的控件(通过注册表打开),所以理论上可以预期类似的性能,或者我们认为。 使用Spy ++查看IE10与使用托管控件的程序之间的差异,可以找到Shell DocObject View的附加包装器:ShellEmbedding。
http://imgur.com/csUDdaU在DesktopGap的托管WebBrowser控件的下半部分显示了包装器,而IE浏览器窗口可以在上部没有ShellEmbedding的情况下看到。
我认为,这是导致表现不佳的原因 - 但我也不知道解决这个问题的方法,也没有任何好的消息来源 - 这引出了我的问题:
有没有办法加快WebBrowser Control的性能?
到目前为止,我们的主要想法是以某种方式删除ShellEmbedding并直接实例化Shell DocObject View(如果可能的话); GPU_RENDERING已启用且IE10模式处于活动状态(http://msdn.microsoft.com/en-us/library/ee330731%28v=VS.85%29.aspx)。
此外,似乎CSS处理也比IE更糟糕,所以可能存在连接。
干杯,
克劳斯
答案 0 :(得分: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 Web浏览器应用程序:~470ms Chrome:48毫秒
正如您所看到的,在我的测试中,IE10和WebBrowser应用程序之间的差异似乎很小。差异可能是应用程序在并行执行其他CPU处理可能需要几毫秒。然而,铬的差异是10倍,这是相当惊人的。
此致 大卫
答案 1 :(得分:0)
在尝试在其他PC上重现问题之后,我的PC - 或者更具体地说是我的用户配置文件 - 似乎是个问题。但是我们无法找到原因,只需重置它,WebBrowser的性能再次处于可接受的水平。
感谢您的努力;)