2011-12-13 64 views
0

IE WebBrowserコントロールは、単一のスレッドアパートメントで実行されるCOMオブジェクトであり、簡単にスレッドできないことを理解しています。私の質問は、2つの完全に別々のアプリケーションがこのCOMコントロールを呼び出す場合、それぞれ独自のスレッドを取得するか、コアIEエンジンのシーンの背後にある同じスレッドで両方を処理するかどうかです。WebBrowserコントロール/シングルスレッドアパートメントヘルプ - .NET

例としては、非常に大きなWebサイトを処理するだけのTest.EXEがあります(1つのスレッドを3分間処理すると仮定します)。これを30回開いた場合、3つのインスタンスがすべて1つのスレッドで動作しているため、30の処理に時間がかかりません。また、それぞれ独自のスレッド/インスタンスを取得します。 1つ1つを処理するのとほぼ同じ時間ですか?

これを試してみましたが、追加するスレッドが増えるにつれて、それぞれのプロセッサが遅くなるように見えます(プロセッサが最大に近づく前でさえ、RAMは分数ではありません)。

+0

[C#WebBrowserコントロールの新しいスレッドでの可能な複製](http://stackoverflow.com/questions/4269800/c-sharp-webbrowser-control-in-a-new-thread) –

+0

ハンス:これはありませんそれは1つのアプリケーション内でそれを行う方法について話しているので、重複しています。私はすでにSTAの問題を認識しているので、複数のアプリケーションでこれを実行するかどうかを知る必要がありました。結果は –

+0

となります。誰がしないでしょうか? –

答えて

1

各アプリケーションは独自のプロセスで実行されるため、WebBrowserコントロールの独自のコピーが作成されます。彼らはお互いに干渉することはできません。

+0

ジョン:私は彼らが間違いなくWebBrowserコントロールの独自のコピーを持っていることを理解していますが、裏でこのコピーは100%ユニークですか?私がメモ帳の15のコピーを開く場合、例は、絶対に何もそれらの間で共有されません。しかし、私がOutlookを開こうとすると、開かれたコアアプリケーションとインスタンスが共有されます。 WebBrowserがそれぞれユニークであっても、リソースの90%をコアIEエンジンと共有していないことを知る方法はありますか? –

+0

Outlookを開こうとすると、Outlookはすでにインスタンスが開いていることを確認し、別のインスタンスに新しいウィンドウを開くように指示します。それから終了します。これはまったく異なり、いいえ、それらの間に共通の書き込み可能なメモリはありません。 –

+0

ジョン:私が何を意味するか説明するための例を挙げようとしていただけです。しかし、私はそれを感謝し、私はすべてがその特定のアプリケーションに固有の100%であると仮定します。 –

1

WebBrowserコントロールは、IEのインプロセスCOMサーバーのラッパーです。つまり、それを使用する各プロセスにロードされます。各プロセスは、メインスレッドを使用して各プロセスと通信できます。

+0

コール:私がジョンの下で書いたように、それは私の質問よりです。それは単なるラッパーなので、各プロセスは同じメインメモリプールをメインエンジンと共有するのですか、あるいはそれぞれがこのエンジンの全く異なるインスタンスを取得しますか?これらのスレッドの30個すべてがCOMオブジェクトの一意のインスタンスを使用していますが、一度IEエンジンに到達すると共有メインインスタンスを使用して終了しますか? –

+0

私はWebBrowserを使用する昨年のスクリプト可能なウェブサイトテスタープログラムを書いた。同じPC上で2つ以上のインスタンスを並行して実行しなければならない場合があり、それらの間で干渉を経験したことはありませんでした。だから私は異なるプロセスでWebBrowserインスタンス間の共有メモリがないと思います。 – kol

+0

ありがとうございました.. –

関連する問題