質問

現在、C#プログラムからWebページをロードするのに費やされた時間を測定しています。

Visual Studio Solutionには、コンソールプログラムとASP.NET Webサイトが1つだけのASP.NET Webサイトがあります。この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ファイルを見つけて読み取り、コンパイルされたコードを実行します(少なくともファイルの読み取りは数ミリ秒かかる場合があります)、
  • サーバー側]ヘッダーを含む応答をビルドしてから送信します。
  • クライアント側]応答を受け取り、それを処理します(トリム)。

では、なぜそれがそんなに速いのですか?すべて/ほとんどのステップをスキップしてクライアントに「Hello World」を返すだけのトリッキーなキャッシュはありますか?

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

役に立ちましたか?

解決

はい、これは0ミリ秒でなければなりません! サーバーが上にあるため localhost. 。 World Wide NetworkのどこかでASP.NETサーバーを取得してみてください。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top