1

アプリケーションでインターネット上の Web サイトを表示するために .NET WebBrowser Control (2.0) を使用しています。これは正常に動作します。残念ながら、これには大きな欠点がありました。速度です。私が知る限り、コントロールは非常に一貫して機能しますJavaScript では不十分です (sunspider では 6000 ミリ秒以上、IE10 では 150 ミリ秒)。これは、Maxthon ブラウザーの「レトロ」モード、最小限の動作例 (つまり、ブラウザーのみを含み、他のロジックを含まない単純なフォーム)、および Visual Studio の組み込みブラウザーを使用して検証することもできます。それらはすべて IE10 バージョンのコントロール (レジストリ経由で有効化) を使用しているため、理論的には同様のパフォーマンスが期待できるか、そう考えていました。ホストされたコントロールを使用する IE10 とプログラムの違いを Spy++ で調べると、Shell DocObject View の追加のラッパーである ShellEmbedding が見つかります。

http://imgur.com/csUDdaUは、DesktopGap のホストされた WebBrowser コントロールの下部にラッパーを示し、IE のブラウザー ウィンドウは上部に ShellEmbedding なしで表示できます。

これがパフォーマンスの低下の原因であると私は信じていますが、これを回避する方法も、これに関する適切な情報源もありません。これが私の質問につながります。

WebBrowser コントロールのパフォーマンスを高速化する方法はありますか?

これまでの主なアイデアは、ShellEmbedding を何らかの方法で削除し、Shell DocObject ビューを直接インスタンス化することでした (可能な場合)。GPU_RENDERING が有効で、IE10 モードがアクティブです ( http://msdn.microsoft.com/en-us/library/ee330731%28v=VS.85%29.aspx )。

また、CSS の扱いも IE より悪いようで、関係があるのか​​もしれません。

乾杯、

クロース

4

2 に答える 2

0

私の提案は、正しい doctype ディレクティブまたは正しいブラウザー エミュレーション モードを使用していることを確認することです。

私は WebBrowser コンポーネントも使用しており、レジストリを介して、doctype ディレクティブに関係なく IE10 モードを強制的に使用します (「HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\myexe.exe」を DWORD 10001 (10 進数) に設定します)。

この 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 アプリ: ~470ms Chrome: 48ms

ご覧のとおり、私のテストでは、IE10 と WebBrowser アプリの違いはほとんどないようです。違いは、アプリが数ミリ秒かかる可能性のある他の CPU 処理を並行して行うことです。ただし、クロムとの違いは 10 倍で、これは非常に驚くべきことです。

よろしく、デビッド

于 2013-05-23T08:49:44.550 に答える