В настоящее время я измеряю время, затраченное на загрузку веб-страницы из программы C#.Не слишком ли быстро загружается страница ASP.NET в 0 мс?
Решение 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-запроса, так что это довольно быстро),
- [клиент сторона] Продлайт запрос,
- [стороне сервера ] Initialize ASP.NET двигатель,
- [стороне сервера] Процесс запроса
- [стороне сервера] Найти и прочитать .aspx файл и выполнить скомпилированный код (по крайней мере чтения файла может стоить несколько мс.),
- [серверная сторона] Создайте ответ, включая заголовки, затем отправьте его,
- [сторона клиента] Получите ответ и обработайте его (отделкой).
Так почему это так быстро? Есть ли сложный кеш, который просто пропускает все/большинство шагов и возвращает «Hello World» клиенту?
Если есть «скрытый» кеш, где он и как его можно отключить, чтобы измерить «реальное» время?
Как вы оцениваете возвращаемое значение секундомера? Вы изучаете свойство ElapsedMilliseconds? Вы всегда можете поспать в коде, чтобы проверить, что это работает правильно. Просто потому, что он находится на localhost, это не значит, что он может вызвать страницу, дождаться, пока она будет отображаться, и проверьте ответ в младшей 1 миллисекунде. –