2010/06/07(Mon) 16:36:15 編集(投稿者)
>渋木宏明(ひどり) さん
> 例えば、フォーム上に WebBroweser を4個貼っただけの単純あ Windows.Forms アプリケーションを作って、ボタン押下で4つの WebBrowser コントロールに対して連続的に Navigation をかけてみて、すべての WebBrowser コントロールが Completed を返すまでにどれくらいの時間を要するかを見てみればいいんじゃないですか?
こちらを試しにやってみましたがやはり遅いです。
大手のポータルサイトを順に回るプログラムで100アクセスを1つのブラウザを使った場合と4つのブラウザを使った場合をそれぞれ3回やりましたが
前者は平均38秒、後者は平均50秒でした。
つまり4つのブラウザを使用した結果 300%アップが期待できるところ32%のスピード向上ということです。
なおキャッシュによる結果の差異を減らすためテストの順番は 1,4,4,1,1,4の順でやっています。
一応Formクラス内のソースも貼り付けておきます。
テストのためなのでメンテ性無視してコピペで作ったので ソース汚いってご指摘はご勘弁^^
button1をクリックするとトータル100サイト読み込むまで読み続けるプログラムです。
(時間の計測は手動で)
=================================================
private int[] cnt;
String[] urls;
public Form1() {
InitializeComponent();
urls = new string[5] { "http://www.yahoo.co.jp", "http://www.google.co.jp", "http://www.goo.ne.jp", "http://www.livedoor.co.jp" ,"http://www.microsoft.com"};
cnt = new int[4];
for (int i = 0; i < 4; i++) {
cnt[i] = 0;
}
}
private void button1_Click(object sender, EventArgs e) {
webBrowser1.Navigate(urls[0]);
webBrowser2.Navigate(urls[1]);
webBrowser3.Navigate(urls[2]);
webBrowser4.Navigate(urls[3]);
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
if (getCntAll() >= 100) return;
cnt[0]++;
label1.Text = getCntString();
webBrowser1.Navigate(getURL());
}
private void webBrowser2_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
if (getCntAll() >= 100) return;
cnt[1]++;
label1.Text = getCntString();
webBrowser2.Navigate(getURL());
}
private void webBrowser3_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
if (getCntAll() >= 100) return;
cnt[2]++;
label1.Text = cnt.ToString();
webBrowser3.Navigate(getURL());
}
private void webBrowser4_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
if (getCntAll() >= 100) return;
cnt[3]++;
label1.Text = getCntString();
webBrowser4.Navigate(getURL());
}
private string getURL(){
return urls[getCntAll() % 5];
}
private int getCntAll() {
return cnt[0] + cnt[1] + cnt[2] + cnt[3];
}
private string getCntString() {
return String.Format("{0}回({1},{2},{3},{4})", getCntAll(), cnt[0], cnt[1], cnt[2], cnt[3]);
}