Не слишком ли быстро загружается страница ASP.NET за 0 мс? - PullRequest
2 голосов
/ 04 июня 2010

В настоящее время я измеряю время, затраченное на загрузку веб-страницы из программы на C #.

Решение Visual Studio имеет консольную программу и веб-сайт ASP.NET с одной страницей. Веб-сайт размещен на сервере разработки ASP.NET. Консольное приложение запрашивает веб-страницу следующим образом:

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();

На веб-странице нет ничего особенного, только ответ о загрузке и отсутствие кода 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» клиенту?

Если есть «скрытый» кэш, где он находится и как его отключить для измерения «реального» затраченного времени?

1 Ответ

1 голос
/ 04 июня 2010

Да, это может и должно быть 0 мс! Поскольку ваш сервер находится на localhost. Попробуйте получить сервер ASP.NET где-нибудь еще во всемирной сети.

И вы не разрешаете localhost, потому что это постоянный адрес 127.0.0.1. А связь по этому адресу осуществляется только ядром вашей ОС.

...