2010-06-04 4 views
2

В настоящее время я измеряю время, затраченное на загрузку веб-страницы из программы 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» клиенту?

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

+1

Как вы оцениваете возвращаемое значение секундомера? Вы изучаете свойство ElapsedMilliseconds? Вы всегда можете поспать в коде, чтобы проверить, что это работает правильно. Просто потому, что он находится на localhost, это не значит, что он может вызвать страницу, дождаться, пока она будет отображаться, и проверьте ответ в младшей 1 миллисекунде. –

ответ

1

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

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

+0

Хорошо, нет ни поиска DNS, ни медленных задач, связанных с сетью. Но как насчет механизма ASP.NET? Действительно ли он читает файл .aspx? Выполняет ли это код? Я думал, что даже чтение однобайтового файла обойдется в несколько миллисекунд. –

+0

Надеюсь, ASP.NET не займет 2 мс/файл. Потому что это означает, что он не может обрабатывать более 500 запросов в секунду. Я ожидаю, что все мелкие файлы будут кэшироваться. – MSalters

+0

Хорошо, я нашел. Прошу прощения, это была глупая ошибка в моем коде, которая привела к 0 мс. результат. Что ты предлагаешь? Закройте ли я вопрос или оставьте его и примите первый ответ? Кстати, теперь, когда время измеряется правильно, оно дает 1.1 с., Что довольно ужасно.С другой стороны, это потому, что я в режиме отладки, поэтому переход на ASP.NET-код может быть очень длинным для отладчика. –

Смежные вопросы