2011-10-11 11 views
5

consideri il seguente codice per misurare i tempi di richiesta/risposta in un'applicazione Asp.Net:modo accurato per misurare i tempi di richiesta/risposta di un'applicazione Asp.Net MVC

protected void Application_EndRequest() 
{ 
    Trace.WriteLine(string.Format("{0}:{1}", 
     (DateTime.Now - HttpContext.Current.Timestamp).TotalMilliseconds, 
     HttpContext.Current.Request.RawUrl)); 
} 

Secondo MSDN, DateTime.Now ha un approssimativo risoluzione di 10 millisecondi.

Inoltre, dal MSDN HttpContext.Timestamp description,

Il timestamp restituito dalla proprietà Timestamp è l'ora locale del server e viene impostato durante l'istanza dell'oggetto HttpContext. L'ora locale è uguale all'ora UTC più l'offset UTC.

Il codice precedente dovrebbe in teoria quindi darmi il tempo di richiesta/risposta totale in millisecondi.

La mia domanda è, quanto è accurato questo? E c'è un modo più preciso/migliore per farlo?

risposta

3

La classe StopWatch può potenzialmente avere una precisione fino a microsecondi, a seconda dell'hardware e del sistema operativo. C'è una proprietà IsHighResolution da leggere se sei in modalità ad alta risoluzione. In caso contrario, la tua precisione dipende dal timer di sistema.

http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx

Il lato alto di utilizzo di questa classe è che sarà certamente non peggiore che il codice di cui sopra. Se su hi-res, otterrai molta più precisione.

Tuttavia, se si sta tentando di misurare le prestazioni e ottenere una visione più approfondita del servizio, ci sono strumenti migliori.

Per esempio, perfview è un buon strumento:

http://blogs.msdn.com/b/dotnet/archive/2012/10/09/improving-your-app-s-performance-with-perfview.aspx

+0

Grazie, ho preso in considerazione questo, tuttavia dovrei avviare (e memorizzare) lo StopWatch da qualche parte. HttpContext.Current.Timestamp viene aggiunto abbastanza presto nella pipeline, quindi sembra un buon posto per misurare i tempi di risposta. – magritte

+0

Accettato come risposta e aggiungerà la risposta alla soluzione. – magritte

7

Si potrebbe provare a utilizzare il miniProfiler nel codice, ho trovato che è abbastanza carino e utile:

http://miniprofiler.com/

+0

Grazie, darò un'occhiata a questo – magritte

+0

Grazie Druegor, questo sembrava davvero buono ma ho seguito l'approccio sopra :-) – magritte

+0

MiniProfiler è sicuramente la strada da percorrere ma solo se non è possibile utilizzare New Relic Agent su il tuo server IIS - https://newrelic.com/docs/dotnet/ –

Problemi correlati