2011-10-11 7 views
5

Rozważmy następujący kod do pomiaru razy żądanie/odpowiedź w aplikacji ASP.NET:dokładny sposób zmierzyć razy żądanie/odpowiedź z aplikacji Asp.Net MVC

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

według MSDN, DateTime.Now ma przybliżoną rozdzielczość 10 milisekund.

Również z MSDN HttpContext.Timestamp description,

Datownik wrócił z posesji Timestamp jest czas lokalny serwera i jest ustawiony podczas konkretyzacji przedmiotu HttpContext. Czas lokalny jest równy czasowi UTC i przesunięciu UTC.

Powyższy kod powinien teoretycznie dać mi całkowity czas żądania/odpowiedzi w milisekundach.

Moje pytanie brzmi, jak dokładne to będzie? I czy istnieje bardziej dokładny/lepszy sposób radzenia sobie z tym?

Odpowiedz

3

Klasa StopWatch może potencjalnie mieć dokładność do mikrosekund w zależności od sprzętu i systemu operacyjnego. Istnieje własność IsHighResolution, aby przeczytać, jeśli jesteś w trybie wysokiej rozdzielczości. Jeśli nie, to jesteś w dół do dokładności zegara systemowego.

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

dobrych stron z zastosowaniem tej klasy jest na pewno nie będzie gorzej, że powyższy kod. Jeśli na hi-res, uzyskasz znacznie większą dokładność.

Ale jeśli próbujesz zmierzyć wydajność i uzyskać lepszy wgląd w swoją usługę, to są lepsze narzędzia.

Na przykład perfview jest dobrym narzędziem:

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

+0

Dzięki, wziąłem pod uwagę to, jednak musiałbym uruchomić (i przechowywać) gdzieś StopWatch. HttpContext.Current.Timestamp jest dodawany dość wcześnie, więc wydaje się dobrym miejscem do pomiaru czasów odpowiedzi. – magritte

+0

Zaakceptowałem to jako odpowiedź i dołączę odpowiedź do rozwiązania. – magritte

7

można spróbować za pomocą miniProfiler w kodzie, Znalazłem to całkiem miłe i pożyteczne:

http://miniprofiler.com/

+0

Dzięki, popatrzę na to – magritte

+0

Dzięki Druegor, wyglądało to naprawdę dobrze, ale poszedłem z powyższym podejściem :-) – magritte

+0

MiniProfiler to zdecydowanie droga, ale tylko wtedy, gdy nie możesz korzystać z New Relic Agent na twój serwer IIS - https://newrelic.com/docs/dotnet/ –

Powiązane problemy