ASP.NETページが0ミリ秒でダウンロードするのは速すぎませんか?
-
24-10-2019 - |
質問
現在、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カーネルによってのみ動作します。
所属していません StackOverflow