ASP.net - Как можно отличить время обработки страницы от времени передачи клиента - PullRequest
2 голосов
/ 16 сентября 2008

Единственный столбец времени в блоге, естественно, включает время передачи клиента. Для анализа анамолии я хочу отличить страницы, которые занимали слишком много времени, от запросов, которые просто имели медленный клиент.

Для буферизованных страниц я рассмотрел модель жизненного цикла страницы ASP.NET и не вижу, где можно нажать и с помощью кода измерить только время обработки страницы до того, как страница будет сброшена клиенту.

Я, наверное, должен был упомянуть, что моя цель - мониторинг производства (не тестирование или разработка). Кроме того, целью является аннотирование блогов с помощью этого измерения для последующего анализа. Текущие мы свободно аннотируем блоги с помощью Response.AppendToLog (). Я полагаю, что желание использовать Response.AppendToLog () несколько ограничивает мои потенциальные точки регистрации, поскольку, например, объект response не является жизнеспособным в Application_EndRequest.

Любое понимание будет оценено.

Ответы [ 5 ]

2 голосов
/ 16 сентября 2008

Вы можете использовать секундомер в BeginRequest и PreSendRequestContent, как упомянуто в двух других ответах, или вы можете просто использовать метку времени запроса в PreSendRequestContent.

Например, на SingingEels я добавил это в конец моей мастер-страницы (да, это взлом): <%=DateTime.Now.Subtract(HttpContext.Current.Timestamp).TotalSeconds %>

Таким образом, я вижу, сколько времени фактически выполнялась любая страница на сервере, включая попадание в базу данных и т. Д.

0 голосов
/ 16 сентября 2008

Вы также можете провести тестирование прямо на веб-сервере. Тогда время ClientTransmission становится равным 0.

0 голосов
/ 16 сентября 2008

Это зависит от набора функций инструментов производительности, которые у вас есть. Но если вам просто нужно зарегистрировать время обработки, вы можете воспользоваться этим подходом.

  1. Зарегистрируйте время начала в событии HttpApplication.BeginRequest .
  2. Зарегистрируйте прошедшее время в событии HttpApplication.PreSendRequestContent .

Если вам нужна определенная страница, вы можете проверить это в событии BeginRequest. События приложения могут быть прикреплены в Global.asax.

0 голосов
/ 16 сентября 2008

Если вы хотите войти на определенную страницу, я полагаю, что жизненный цикл страниц asp.net начинается с PreInit и заканчивается Disposed, так что вы можете регистрировать все что угодно в этих событиях.

Или, если вы хотите войти на каждую страницу, как указал Боб Диззл, вы можете использовать файл Global.asax, который имеет тысячу событий на выбор: http://msdn.microsoft.com/en-us/library/2027ewzw.aspx

0 голосов
/ 16 сентября 2008

проще всего было бы использовать следующие события в файле global.asax:

Защищено void Application_BeginRequest (Отправитель объекта, EventArgs e)
protected void Application_EndRequest (Отправитель объекта, EventArgs e)

Вы также можете реализовать собственный httpmodule

...