2009-09-08 4 views
13

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

Моя текущая стратегия предполагает использование Application_BeginRequest события, связанного обратного вызова (в Global.asax файле моего сайта решения), чтобы начать измерение времени, затрачиваемого на процесс на стороне сервера (следующим образом)

protected void Application_BeginRequest(Object sender, EventArgs e) { 
    Context.Items.Add("Request_Start_Time", DateTime.Now); 
} 

и вычислить время, прошедшее на OnPreRender события, связанного обратного вызова веб-форму, в печати его на шаблонного элемента (следующим образом)

protected override void OnPreRender(EventArgs e) { 
    base.OnPreRender(e); 

    TimeSpan tsDuration = DateTime.Now.Subtract((DateTime)Context.Items["Request_Start_Time"]); 
    ExecutionTime.InnerHtml = "<em>Server-side processing duration: " + tsDuration.TotalMilliseconds + " miliseconds.</em>"; 
} 

это лучший способ измерить время загрузки? Есть ли более «изящный» способ достичь этого?

Заранее благодарим за ваше время и сотрудничество.

ответ

7

<% трассировки @ Page = "истина" %> (или установить это в web.config)

Включение трассировки и проверить информацию в Trace.axd (в корневом каталоге вашего сайта).

Тогда можно установить точки синхронизации с:

Trace.Write("Start time intensive task"); 
Trace.Write("Stop time intensive task"); 

http://msdn.microsoft.com/en-us/library/bb386420.aspx

Это предполагает, что "клиент" хочет глубокие данные отладки.

+0

Как я уже говорил, я использую главную страницу, и я не понимаю, как включить трассировку на ней, поскольку она, похоже, не обладает свойством «Trace». Не могли бы вы мне помочь? – XpiritO

+0

Вам не нужно поворачивать трассировку на странице за страницей, просто выполните в вашем web.config, и она будет работать на всех страницах: http://msdn.microsoft.com/en-us/library/6915t83k.aspx Но пожалуйста, не оставляйте эту настройку для производства! – realMarkusSchmidt

+0

@markus «Эта тема больше не доступна» @ http://msdn.microsoft.com/en-us/library/6915t83k.aspx – Zack

1

Это действительно зависит от того, какой показатель вы хотите на самом деле показывать.

  1. Является ли это общей «страницей, загруженной в __ секунды», которая будет там все время?
  2. Должно ли это определить, соответствует ли ваше кодированное решение требованиям для клиента и не требуется для производства?

Ответ на эти два вопроса будет определять, что имеет наибольший смысл, когда дело доходит до записи. Если ваша цель - №1, я бы сказал, что ваш метод работает. Если вы собираетесь на номер 2, я могу посмотреть, что у Эрвина.

4

Ваш аппликатор кажется достаточно точным, если вы не визуализируете очень большие деревья управления, и вы не используете серверные элементы управления, которые выполняют всю свою работу в переопределенном методе Render (неспециализированные авторы управления сервером имеют тенденцию делать точно что...).

В этом случае на самом деле есть способ визуализировать фактическое время рендеринга ;-) Просто используйте объект HttpResponse.Filter, чтобы заполнить заполнитель истекшим временем. Эти фильтры применяются после веб-форма визуализируется и до этого отправляется клиенту.

Если вам это нужно только для разработки, найдите trace.axd, это даст вам множество подробностей не только о сроках, но и контексте запроса, структуре древовидной структуры и размере страницы.

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