DOBON.NET DOBON.NETプログラミング掲示板過去ログ

VB2010でのWebページアクセスを最速で行う方法をどなたかご存じないでしょうか?

環境/言語:[Windows8.1 64bit VB2010]
分類:[.NET]

DOBON.NET管理人様、お世話になっております。

また、回答者の皆様ご苦労様です。


私は現在、VB2010を使ってWebアクセスを最速時間で行いたいと思っており、
できれば、私にもお力添え頂ければ大変ありがたいです。


今回行いたいと思っておりますのは、
あるファイルに複数のURLを列記しておき、
そのURLのWebページのHTMLソースを抽出したいと思っています。

これまで私はそのようなことを行う際、
WebBrowserコントロールを使用してページを表示し、
Documentプロパティから各エレメントのテキスト(innerText)に
アクセスするような方法ととっていました。

しかしながらいちいちWebページを表示させる必要がないことに気づき、
恥ずかしながら最近ある方のブログの説明から、
WebClientクラスというものを使えることに気づきました。


この方法で以下のような記述のアクセス方法に変えましたところ、
WebBrowserコントロールを使用していた時期は、
1つのサイトを処理するのに5〜8秒かかっていたものが、
0.8秒くらいに改善されました。

---
Dim wc As WebClient = New WebClient()

Dim st As Stream = wc.OpenRead("http://www.yahoo.co.jp/")

Dim enc As Encoding = Encoding.GetEncoding("Shift_JIS")
Dim sr As StreamReader = New StreamReader(st, enc)
Dim html As String = sr.ReadToEnd()
sr.Close()

st.Close()
---


ですが、ネット上でいろいろ調べておりましたところ、
私と同様に悩んでいる方の以下のQ&Aサイトの投稿内容を見ますと、
さらに速く実現することができるような印象を受けましたが、
別のソース記述に変えることで、
もっと高速にWebアクセスが実現できるのでしょうか?

具体的には現在の0.8秒かかっているものを
0.08秒くらいにすることはできるのでしょうか?というご相談になります。

http://social.msdn.microsoft.com/Forums/ja-JP/dc5f4075-e4f5-4656-a517-73bde68b6ded/web?forum=vbexpressja

(上記ページからの抜粋)
>現在、WebClientもしくはWebRequestでYahooファイナンス時系列の1ページの取得に
>0.1〜0.2秒ほどかかっていますが、他の方の速いソフトはおそらくこれよりも1桁ないし
>2桁高速でデータ取得を行っているようなのです。


私が現在使用している環境でのパソコンの仕様としましては、

CPU:Intel Core i-7-4770 3.40GHz
Memory:8.00GB
Windows:8.1 64bit

インターネットの環境としましては、
ADSLの12Mというプランというで契約した環境となっています。

もし質問する上で情報が不足しておりましたら申し訳ありません。

どなたかお詳しい方、ご教授頂けますと幸いです。
2014/05/06(Tue) 09:02:19 編集(投稿者)

■No32341に返信(柘植さんの記事)
> 具体的には現在の0.8秒かかっているものを
> 0.08秒くらいにすることはできるのでしょうか?というご相談になります。

掲載されているコードを手元の環境で実行すると、Debug で 90ms 前後、Release で 70ms 前後でした。(念のため:1,000ms = 1 秒。90ms = 0.09 秒ということ)
つまり、コードの問題ではないと考えられます。


手元環境は以下の通りです。

・Windows 8.1 Pro Update 適用済
・Core i7-2600K (3.40GHz)
・16GB RAM
・256GB SSD
・eo 光


個人的には、回線速度の限界、時間帯による差(経路の混雑・サーバーの負荷状況)、セキュリティ関連ソフトによる遅延などの環境要因かなと予想しています。
(切り分けは難しいです)
2014/05/06(Tue) 09:05:27 編集(投稿者)

理論的な計算を示しておきます。

yahoo.co.jp を IE11 でアクセスしたとき、得られる HTML ソースは 154KB。
154KB を 0.1 秒で受信するためには 1,540KB/sec の転送速度が必要。
1byte = 8bits であるため、Mbps 表記に直すと、1,540 * 8 / 1,024 = 12.0Mbps。
実測値でこのスピードが必要になります。


たいていの場合、契約プランに表記されている転送速度は理論値で実測値は数割という印象です。
仮に実測 4Mbps ぐらいだとすれば、0.3 秒ぐらいが適正値ですが、0.8 秒かかるとすると先にも書いたように時間帯の差、セキュリティ関連ソフトといった、回線以外の環境要因も考えられます。


ただ、0.1 秒という世界を狙うには、回線を変えるしかないように思います。
まずは、手元の環境の回線速度の実測値を知るべく、スピードテストにかけてみてはいかがでしょうか。
Azulean様、この度はこんなに素早くアドバイスを頂きまして、
本当にありがとうございます。とても喜んでおります。

お返し頂いた内容はとても懇切丁寧で非常にわかりやすく
本当に感謝しております。

まずはアドバイス通りにスピードテストを実施してみたいと思います。
もしその上でまたご教授頂きたいことがありましたら、
こちらに投稿させて頂きたいと思いますので、
もしよろしければアドバイス頂けますと幸いです。

今回は本当にありがとうございます!!

DOBON.NET | プログラミング道 | プログラミング掲示板