C#.NET 2.0これが該当する場合は、Webサービスの速度のトラブルシューティング
なぜ私たちが持っているWebサービスが遅くなっているのかを知るために始めるつもりです。このWebサービスは、プロキシを介して別のドメインにジャンプし、ストアドプロシージャにデータを照会し、私が尋ねたものに応じて、int/string/dataset私はちょうど同じ方法でそれを繰り返し問い合わせるコンソールアプリを書いたので、始めにいくつかの統計を集めることができます。
キープアライブは、各リクエストごとにオフ、となっています。レガシーな理由で誰も記載されていないため、直ちに匂いがあります。
同じリクエストを何回も繰り返していると、私はいくつかの奇妙な動作に気付きました。ここでは、各繰り返しがクエリを作成してデータを返すのにかかる時間を反映した結果を示します。
Beginning run #1...completed in 4859.3128 ms
Beginning run #2...completed in 3812.4512 ms
Beginning run #3...completed in 3828.076 ms
Beginning run #4...completed in 3828.076 ms
Beginning run #5...completed in 546.868 ms
Beginning run #6...completed in 3828.076 ms
Beginning run #7...completed in 546.868 ms
Beginning run #8...completed in 3828.076 ms
Beginning run #9...completed in 3828.076 ms
Beginning run #10...completed in 578.1176 ms
Beginning run #11...completed in 3796.8264 ms
Beginning run #12...completed in 3828.076 ms
Beginning run #13...completed in 3828.076 ms
Beginning run #14...completed in 3828.076 ms
Beginning run #15...completed in 3828.076 ms
Beginning run #16...completed in 3828.076 ms
Beginning run #17...completed in 546.868 ms
Beginning run #18...completed in 3828.076 ms
Beginning run #19...completed in 3828.076 ms
Beginning run #20...completed in 546.868 ms
Total time: 61165 ms
Average time per request: 3058 ms
非常に小さいレベルまで複数の繰り返し値があることは奇妙です。 繰り返し同じ時間内に返されるボトルネックはありますか?
...ミリ秒の時間を計算して表示するためのコードはオフではありませんが、それをトラッキングするTimeSpanオブジェクトは各ループのローカルなので、私はそうは思わないと思います。
EDIT:ジョンは...屋(変数名は、独自のを保護するために変更し、ので、これはコンパイルされないになるだろう脂肪指何かを持っているかもしれません)に行くので、ここでは、タイミングコードのため
int totalRunTime = 0;
for (int i = 0; i < numberOfIterations; i++)
{
Console.Write("Beginning run #" + (i + 1).ToString() + "...");
DateTime start = DateTime.Now;
SimpleService ws = new SimpleService();
DataSet ds = ws.CallSomeMethod();
DateTime end = DateTime.Now;
TimeSpan runTime = end - start;
totalRunTime += (int)runTime.TotalMilliseconds;
Console.Write("completed in " + runTime.TotalMilliseconds.ToString() + " ms\n");
}
Console.WriteLine("Total time: " + totalRunTime.ToString() + " ms");
Console.WriteLine("Average time per request: " + (totalRunTime/numberOfIterations).ToString() + " ms\n");
を尋ねました
確かに、今編集で投稿されています。 – Chris
もう1つ:テストアプリを繰り返し実行すると、ほとんど同じ時間の異なる組み合わせが表示されます。同じミリ秒の時間値ですが、異なる順序です。 – Chris
re:あなたの編集...はい、もし小秒のうちの1つがヒットを実行するならば、それは間違いなくその速さについて過去をスキャンします。 リクエストするサーバーとエンドポイントサーバー(プロキシではありません)にアクセスできますので、それぞれのネットワークトレースを起動して何かを識別できるかどうか確認します。 – Chris