2009-09-08 28 views
13

Actualmente estoy desarrollando una aplicación ASP.NET que usa un MasterPage y quiero medir el tiempo de carga de mi formulario web y mostrar esa información al cliente.Medir el tiempo de carga de la página ASP.NET

Mi estrategia actual consiste en utilizar la devolución de llamada asociado Application_BeginRequest evento (en el archivo Global.asax de mi solución sitio web), para iniciar la medición del tiempo empleado en el proceso de servidor (como sigue)

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

y calcular el tiempo transcurrido en la devolución de llamada asociado OnPreRender de eventos del formulario web, imprimirlo en un elemento de marcador de posición (como sigue)

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>"; 
} 

es ésta la mejor manera de medir el tiempo de carga? ¿Hay una manera más "elegante" de lograr esto?

Gracias de antemano por su tiempo y cooperación.

Respuesta

7

<% @ Page Traza = "true" %> (o conjunto esto en web.config)

habilitar el seguimiento y echa un vistazo a la información contenida en trace.axd (en la raíz de su sitio web).

entonces se podría establecer puntos de cronometraje con:

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

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

Esto es asumiendo "su cliente" quieren datos de depuración de profundidad.

+0

Como mencioné, estoy usando una página maestra y no estoy descifrando cómo habilitar Trace en ella, ya que no parece tener la propiedad "Trace". ¿Podrías por favor ayudarme con esto? – XpiritO

+0

No necesita activar Tracing en una página por página, simplemente haga en su web.config, y funcionará para todas las páginas: http://msdn.microsoft.com/en-us/library/6915t83k.aspx Pero ¡por favor no guarde esta configuración para producción! – realMarkusSchmidt

+0

@markus "Este tema ya no está disponible" @ http://msdn.microsoft.com/en-us/library/6915t83k.aspx – Zack

1

Esto realmente depende de qué métrica estás buscando para mostrar realmente.

  1. ¿Esta es una cosa de tipo "página cargada en __ segundos" que estará allí todo el tiempo?
  2. ¿Esto es para determinar si su solución codificada cumple con los requisitos para un cliente y no es necesaria para la producción?

La respuesta a estos dos determinará qué tiene más sentido a la hora de grabar. Si su objetivo es # 1, entonces diría que su método funciona. Si vas por el número 2, podría estar mirando lo que tiene Erwin.

4

Su aplicación parece ser lo suficientemente exacta, siempre que no represente árboles de control muy grandes y no use controles de servidor que hagan todo su trabajo en un método Render anulado (los autores de controles de servidor inexpertos tienden a hacer exactamente ese...).

En ese caso, en realidad hay una manera de representar el tiempo real de renderizado ;-) Solo use un objeto HttpResponse.Filter para llenar un marcador de posición con el tiempo transcurrido. Estos filtros se aplican después de el formulario web se procesa y antes de ir al cliente.

Si necesita esto solo para desarrollo, busque trace.axd, esto le dará una gran cantidad de detalles no solo sobre el tiempo sino también el contexto de la solicitud, la estructura de árbol de control y el tamaño de página.

Cuestiones relacionadas