HttpWebRequestが極端に遅い!
2023-08-26 01:55:22
質問
私は自分のウェブサーバーに接続するためにオープンソースライブラリを使用しています。ウェブサーバーが非常に遅くなることを懸念していましたが、Ruby で簡単なテストをしてみたところ、次のような結果が得られました。
Rubyのプログラムです。2.11seconds for 10 HTTP GETs
Rubyのプログラムです。HTTP100回で、18.13秒 GETs
C#ライブラリ:20.81秒(10件のHTTP GET
C#ライブラリ。36847.46seconds for 100 HTTP GETs
プロファイリングしたところ、この関数が問題であることがわかりました。
private HttpWebResponse GetRawResponse(HttpWebRequest request) {
HttpWebResponse raw = null;
try {
raw = (HttpWebResponse)request.GetResponse(); //This line!
}
catch (WebException ex) {
if (ex.Response is HttpWebResponse) {
raw = ex.Response as HttpWebResponse;
}
}
return raw;
}
マークされた行はそれ自体で完了するのに1秒以上かかり、一方、1つのリクエストを行うrubyプログラムは0.3秒かかります。また、これらのテストはすべて 127.0.0.1 で行っているため、ネットワークの帯域幅は問題ではありません。
この巨大なスローダウンの原因は何でしょうか。
アップデイト
変更されたベンチマーク結果を確認してください。私は実際に100ではなく10GETでテストし、私は結果を更新しました。
どのように解決するのですか?
遅い Web リクエストの主な原因として私が発見したのは、プロキシ プロパティです。 GetResponse メソッドを呼び出す前にこのプロパティを null に設定すると、クエリはプロキシ自動検出のステップをスキップします。
request.Proxy = null;
using (var response = (HttpWebResponse)request.GetResponse())
{
}
プロキシの自動検出は、応答を返す前にクエリに最大で 7 秒かかっていました。 このプロパティが HttpWebRequest オブジェクトに対してデフォルトでオンに設定されているのは、少し迷惑な話です。
関連
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】「namespace x already contains a definition for x」エラーの修正方法は?VS2010にコンバートした後に発生しました。
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 0.1fを0にすると、なぜ10倍もパフォーマンスが落ちるのですか?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] 8192個の要素にループをかけると、プログラムが遅くなるのはなぜですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】HttpWebRequestとHttpWebResponseからHttpステータスコード番号(200, 301, 404など)を取得する。
-
[解決済み】HTTPWebrequestでファイルをアップロードする(multipart/form-data)。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない