准确测量Asp.Net MVC应用程序的请求/响应时间的方法

时间:2011-10-11 22:42:30

标签: c# asp.net .net asp.net-mvc-3 datetime

考虑以下用于测量Asp.Net应用程序中的请求/响应时间的代码:

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

根据MSDNDateTime.Now的分辨率大约为10毫秒。

此外,来自MSDN HttpContext.Timestamp description

  

Timestamp属性返回的时间戳是服务器的本地时间,并在HttpContext对象的实例化期间设置。本地时间等于UTC时间加上UTC偏移。

上面的代码理论上应该以毫秒为单位给出总请求/响应时间。

我的问题是,这有多准确?是否有更准确/更好的方式来实现它?

2 个答案:

答案 0 :(得分:7)

您可以尝试在代码中使用miniProfiler,我发现它非常整洁有用:

http://miniprofiler.com/

答案 1 :(得分:3)

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