理由は、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以外のプロキシ接続制限に関する多くの情報を見つけられませんでした。
私のプログラムでは、接続を作成してコンテンツをダウンロードすると、応答を閉じて最終的にリクエストを中止しますが、これはバックグラウンドでフィドラーと同じコードが実行されているのでしょうか?速い。 Fiddlerはリクエストを変更し、リクエストごとに同じ接続を使用しますか? – Ehsan
@エシャン_ "Fiddlerがリクエストを変更し、リクエストごとに同じ接続を使用しますか? – CodeCaster
どうすれば私のプログラムでHttpWebRequestでこの機能を使うことができますか? – Ehsan