2012-09-26 20 views
5

問題:異なるホストから数百のイメージをダウンロードする必要があります。各ホストには、20〜数百のイメージがあります。WebClientはhttpデータをダウンロードする最良の方法ですか?

解決方法:WebClientのDownloadDataメソッドでイメージをダウンロードする必要があるたびにnew WebClientを使用してください。

オープンソケット接続のプールを保ち、低レベルの呼び出しを使用してhttp要求を行う方がよいでしょうか?

tcp接続を開く/閉じるにはコストがかかります(私はWebClientがそうしていると仮定しています)ので、プールを使用する方が効率的ですか?

+0

ベストコードは、必要な時間内にエラーなしで必要な結果を達成するコードです。あなたの現在のコードと比較して改善が必要なことについてコメントすることができます(イメージをダウンロードする速度と現在のコードのダウンロード速度は目標よりも遅く、ネットワークの限界に達するまで改善する余地があります)。 –

+0

私はそのスピードが最も懸念されることを付け加えておきます。 – sanjosep43

+0

+1非常に興味深い質問です。 –

答えて

6

WebClientが使用するインフラストラクチャはすでにHTTP接続をプールしているため、これを行う必要はありません。 WiresharkのようなものをいくつかのサンプルURLとともに使用して確認してください。

基本的には、他のプログラミングタスクと同じアプローチをとっています。最も簡単な方法でコードを記述し、必要に応じて十分に機能するかどうかを確認してください。そうであれば、あなたは完了です。そうでない場合は、適切なツール(ネットワークアナライザなど)を使用してを実行してください。なぜなら、それは十分に機能していないからです。

私の経験では、必要なものがなければWebClientは問題ありませんが、WebRequestと同じくらい細かい制御はありません。 には、その制御が必要なが必要な場合は、WebClientに行ってください。

+0

ありがとうございます。私はWebClientがプールを使用するとは思わなかった。私はwiresharkでそれをチェックしなければならないでしょう。また、私は非常に良いあなたの本を読む! – sanjosep43

+0

@ user261490 Jonさんの本は素晴らしいですが、このコメントは質問には関係ありません。他の人に役立つように質問や回答に関連するコメントを投稿してください。 –

+0

@ user261490 Jonがここにあります。考慮すべきことの1つは、あなたが選んだものと組み合わせてMSからの[並列ライブラリ](http://msdn.microsoft.com/en-us/library/dd460720.aspx)を調べることです。これにより、もちろん帯域幅によって制限される複数のスレッドでダウンロードすることができます。あなたが完了したときに接続を閉じる()ことを確認してください...私は間違いを一度犯しました。 – iMortalitySX

0

私は欲しいものを掻き集めるためにHttpWebRequestHttpWebResponseを使用します。もちろん、要件に利用可能なサービスはありませんが、場合によっては制限(ビジネス上の制限)があり、純粋なhttp要求からhtmlを掘り起こすことを好みます。ときどき開発者のように感じることがあります。

+3

'HttpWebRequest' /' HttpWebResponse'を使用する理由は何もありません。なぜなら、この答えはあまり役に立たないでしょう。 –

関連する問題