Точный способ измерения времени запроса / ответа приложения Asp.Net MVC - PullRequest
6 голосов
/ 12 октября 2011

Рассмотрим следующий код для измерения времени запроса / ответа в приложении Asp.Net:

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

Согласно MSDN , DateTime.Now имеет приблизительное разрешение 10 миллисекунд.

Также от MSDN HttpContext.Timestamp описание ,

Метка времени, возвращаемая из свойства Timestamp, является локальным временем сервера и устанавливается при создании экземпляра объекта HttpContext. Местное время равно времени UTC плюс смещение UTC.

Приведенный выше код теоретически должен дать мне общее время запроса / ответа в миллисекундах.

Мой вопрос: насколько точным это будет? И есть ли более точный / лучший способ сделать это?

Ответы [ 2 ]

7 голосов
/ 12 октября 2011

Вы можете попробовать использовать miniProfiler в своем коде, я обнаружил, что он довольно аккуратный и полезный:

http://miniprofiler.com/

3 голосов
/ 12 октября 2011

Класс StopWatch потенциально может иметь точность до микросекунд в зависимости от аппаратного обеспечения и операционной системы.Существует свойство IsHighResolution для чтения, если вы находитесь в режиме высокого разрешения.Если нет, то вы дошли до точности системного таймера.

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

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

Но, если вы пытаетесь измерить производительность и лучше понять свой сервис, то есть лучшие инструменты.

Например, perfview - хороший инструмент:

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

...