2012-05-03 12 views
16

WebサイトをクロールするC#でマルチスレッドプログラムを作成しましたが、バックグラウンドリクエストでFiddlerを開始したときに、12倍高速で完了しました。遅くなる。どうすれば可能ですか?(私のineternetへの接続とFiddlerへの接続にはプロキシ設定がありません)私のアプリケーションにフィドラーの性能を注入できるのであれば、それはすばらしいでしょうか?場面の裏に魔法はありますか?人々はこれを確認することができるように:)FiddlerでHttpリクエストが高速になっている理由

おかげ

答えて

11

あなたはいくつかのサンプルコードを表示することができますか?さもなければそれは野生の推測になるでしょう。

私の最高の推測:Fiddler uses keepaliveこれは何度も何度も接続を開く手間を省くでしょう。これは、Reuse client connectionsReuse connections to serversの両方を無効にすることで確認できます。それが通常よりも遅い(または遅くなる)場合は、接続を有効に保つことによって利益が得られます。

+0

私のプログラムでは、接続を作成してコンテンツをダウンロードすると、応答を閉じて最終的にリクエストを中止しますが、これはバックグラウンドでフィドラーと同じコードが実行されているのでしょうか?速い。 Fiddlerはリクエストを変更し、リクエストごとに同じ接続を使用しますか? – Ehsan

+0

@エシャン_ "Fiddlerがリクエストを変更し、リクエストごとに同じ接続を使用しますか? – CodeCaster

+1

どうすれば私のプログラムでHttpWebRequestでこの機能を使うことができますか? – Ehsan

22

理由は、Fiddlerを使用するときに無視されるHTTP接続の量の制限です。

System.Net.Http.HttpClientを使用して複数の同時リクエスト(〜80件)を実行しているときに同じ現象が発生しました。 Fiddlerを実行していると、すべてのリクエストがずっと速く完了していました。キープ・アライブは確かに有効でした。

私は、何が起きているのかを知るためにWiresharkを使いました。最初に、httpトラフィックのやり方が違っていることに気付きました。フィドラーのリクエストは一気に投げられ、その後もレスポンスはうまくグループ化された。 Fiddlerなしでは、要求は応答とインタリーブされました。

第2に、tcpviewは、フィドラーのない私のコードがサーバーへの2つのtcp接続しか作成していないことを示しました。 Fiddlerが始動すると、接続数が大幅に増加しました。私のアプリからFiddlerまで、そしてFiddlerからサーバーまでに数十もありました。

http標準では、http接続の数を2以下にすることを推奨しており、httpクライアントではこの制限がデフォルト設定として実装されているようです。

.NETアプリケーションでは、ServicePointManager.DefaultConnectionLimit静的プロパティで制限を制御できます。実験として、これを100に設定すると、要求がFiddlerの有無にかかわらず同じ速度で実行されました。

<system.net> 
    <connectionManagement> 
     <add address="*" maxconnection="100" /> 
    </connectionManagement> 
</system.net> 

、なぜデフォルトの接続制限はフィドラーを使用しながら、尊敬されていません。

設定もapp.configを介して制御することができますか? HTTPクライアントがプロキシを使用し、Fiddlerがプロキシとして機能する場合、制限が異なることが分かります。私はthis old article以外のプロキシ接続制限に関する多くの情報を見つけられませんでした。

関連する問題