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

mag*_*tte 6 .net c# asp.net datetime asp.net-mvc-3

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

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

根据MSDN,DateTime.Now具有大约10毫秒的分辨率.

另外,从MSDN HttpContext.Timestamp描述,

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

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

我的问题是,这将是多么准确?还有更准确/更好的方法吗?

Dru*_*gor 7

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

http://miniprofiler.com/


bry*_*mac 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