私は、HttpWebResponse.GetResponse()とStreamreader.ReadToEnd()を使用して、StreamReader.Read()を使用して試して、 をC#で制限されたWebクローラーを実装しようとしています。私のHTML文字列を構築するためのループ。HTTPWebResponse + StreamReader非常に遅い
私は約5-10Kのページしかダウンロードしていません。
非常に遅いです!たとえば、平均GetResponse()時間は約0.5秒ですが、平均StreamReader.ReadToEnd()時間は約5秒です!
すべてのサイトは、自分の場所に非常に近いため、高速である必要があります。 (エクスプローラではD/Lにほとんど何もかかりません)、私はプロキシを使用していません。
My Crawlerには、同じサイトから同時に約20のスレッドが読み込まれています。これは問題を引き起こす可能性がありますか?
どのようにしてStreamReader.ReadToEnd回を減らすことができますか?
Webクライアントを使用してみましたが、同じ結果(平均時間は変更されていません)。 私は180MBPSの平均d/lスピードで1.5MBPSの接続があることを言及する必要があります 私はStreamReader.Readを同時に呼び出すすべてのスレッドがそれと関連があるかもしれないと考えていましたか?それともこれは無関係ですか? – Roey
私の経験上、このような接続では、帯域幅を3-4スレッドで飽和させます。あなたがpingをしているウェブサイトが本当に遅く、I/Oを待つスレッドがたくさんある場合を除き、もっと多くを実行する必要はありません。 – kgriffs
うわー!!!私は非同期のHttpWebRequestを使用してクライアントあたり約300スレッドのテストサーバーをロードし、各スレッドは「シリアルに」ダウンロードしていました。 maxconnection設定を変更すると、各スレッドはデータを10倍高速にダウンロードできました。 –