2

私は現在、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」をクライアントに返すトリッキーなキャッシュはありますか?

「隠された」キャッシュがある場合、それはどこにあり、どのようにそれを無効にして「実際の」費やされた時間を測定することができますか?

4

1 に答える 1

1

はい、これは 0 ミリ秒にすることができます。サーバーがlocalhost. ASP.NET サーバーをワールド ワイド ネットワークの別の場所に取得してみてください。

また、これは への定数アドレスであるため、localhost を解決しません127.0.0.1。そして、このアドレスへの通信は、OS カーネルによってのみ操作されます。

于 2010-06-04T11:10:23.733 に答える