私は現在、C#プログラムからWebページをロードするために費やされた時間を測定しています。
Visual Studioソリューションには、コンソールプログラムと1ページのASP.NETWebサイトがあります。WebサイトはASP.NET開発サーバーでホストされています。コンソールアプリケーションは、次のようにWebページを照会します。
bool isSuccess;
Stopwatch timeSpentToDownloadPage = Stopwatch.StartNew();
WebRequest request = HttpWebRequest.Create(new Uri("http://localhost:12345/Test.aspx", UriKind.Absolute));
request.Timeout = 200;
using (WebResponse response = request.GetResponse())
{
Stream responseStream = response.GetResponseStream();
StreamReader sr = new StreamReader(responseStream);
string responseText = sr.ReadToEnd().Trim();
isSuccess = (responseText == "Hello World");
}
timeSpentToDownloadPage.Stop();
Webページには特別なことは何もありません。ロード時の応答だけで、ASP.NETコードはありません。
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("Hello World");
}
これで、ストップウォッチはコードが0ミリ秒を費やしたたびに表示されます。すべての作業(サーバーのクエリ、応答の取得など)を実行します。
どうしてそれは可能ですか?私がしていることに何か問題はありませんか?本当に、私は少なくとも10〜20ミリ秒を期待していました。すべてのクライアント側コードを実行してから、100ミリ秒。に:
- [クライアント側]URIからクエリするページを検索します(DNSクエリを必要としないため、非常に高速です)。
- [クライアント側]リクエストを実行し、
- [サーバー側]ASP.NETエンジンを初期化し、
- [サーバー側]リクエストを処理し、
- [サーバー側].aspxファイルを見つけて読み取り、コンパイルされたコードを実行します(少なくとも、ファイルの読み取りには数ミリ秒かかる場合があります)。
- [サーバー側]ヘッダーを含む応答を作成して送信し、
- 【クライアント側】応答を受信して処理(トリム)します。
では、なぜこれほど高速なのですか?すべて/ほとんどのステップをスキップして「HelloWorld」をクライアントに返すトリッキーなキャッシュはありますか?
「隠された」キャッシュがある場合、それはどこにあり、どのようにそれを無効にして「実際の」費やされた時間を測定することができますか?