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

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

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

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

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


person cbcolin    schedule 16.09.2008    source источник


Ответы (5)


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

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

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

person Timothy Khouri    schedule 16.09.2008
comment
Ах, мне это нравится. Возможно, мне придется реализовать это и проверить. Спасибо за совет! - person Elijah Manor; 03.10.2008

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

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

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

person Bob Dizzle    schedule 16.09.2008

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

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

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

person Kimoz    schedule 16.09.2008

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

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

person thomasb    schedule 16.09.2008

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

person Joel Coehoorn    schedule 16.09.2008