質問者
Webデータを高速で取得するには?

質問
-
VB.netにて、Webデータ(具体的にはYahooFinance株価)を取得するプログラムを作成しましたが、他の方が作られたソフトに比べ速度が遅く悩んでいます。そこで以下の質問があります。ご存知の方がおられましたら、ご教示ください。
作成プログラム内容
□.netのWebClientを使用し、HTMLデータを取得
□.netのRegular Expressionで必要部分を抽出
□テキストファイルに書き出し(csv形式)
□上記のプロセスをマルチスレッド化質問したいこと
□形式で表示されているWebデータを、VB.netにて最も高速に取得・処理する方法を教えてください。□もう少し詳しく言うと、VB6.0時代の経験では、Webデータを取得・処理する場合、上記のやり方とVBからIEオブジェクトを使用しデータ処理するやり方があったと思いますが(このときは、自分の経験では上記の正規表現を使った方が速かった)、VB.netでは標準でこれを高速にやるようなクラスはありますか?
長くなりましたが、以上よろしくお願いいたします。
すべての返信
-
-
.NET では、参照型であれば ByVal で渡すのはインスタンスの参照ですから、ByRef で渡すのと大きさは変わりません。ByRef を使うのは、呼び出し先でインスタンスそのものが他のものに変わる(インスタンスのメンバの変更ではないですよ)というあまり無い状況でのみ使うべきです。
スレッドを増やしたら、ということなら、なんとなくこの問題のような気が。
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=356622&SiteID=7
-
(再度投稿します)
この後いろいろ調査した結果、どうやらWebデータすなわちHtmlソースの取得のところが、
他の方のソフトに比べて時間がかかっているようです。
(といっても通常いろいろなHPで紹介されている、WebClientまたはWebRequest等を
通常通り使っています)
そこで質問ですが、これらを使って、または、これらよりもっと速くHtmlソースを取得する方法
は有りますでしょうか?
現在、WebClientもしくはWebRequestでYahooファイナンス時系列の1ページの取得に
0.1~0.2秒ほどかかっていますが、他の方の速いソフトはおそらくこれよりも1桁ないし
2桁高速でデータ取得を行っているようなのです。
いろいろ試しましたが良策が見つかりません。どうか助けてください。
よろしくお願いします。 -
たぶん、一銘柄毎にHttpWebRequest.CreateでWebRequestオブジェクトを作成されていると思いますので、ここで時間がかかっているのではないでしょうか?
HTTPは単純なプロトコルですので、ソケットを使ってテストされてみたらいかがでしょうか?
以下などにサンプルソースがあります。Socket クラス
http://msdn2.microsoft.com/ja-JP/library/system.net.sockets.socket.aspxSocketを使ってファイルをダウンロードし表示する
http://dobon.net/vb/dotnet/internet/downloadusesocket.html