考虑以下用于测量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 description,
从
Timestamp
属性返回的时间戳是服务器的本地时间,并在HttpContext
对象的实例化期间设置。本地时间等于UTC时间加上UTC偏移。
上面的代码理论上应该以毫秒为单位给出总请求/响应时间。
我的问题是,这有多准确?是否有更准确/更好的方式来实现它?
答案 0 :(得分:7)
您可以尝试在代码中使用miniProfiler,我发现它非常整洁有用:
答案 1 :(得分:3)
StopWatch类的精度可能低至几微秒,具体取决于硬件和操作系统。如果您处于高分辨率模式,则可以读取IsHighResolution属性。如果没有,那么你的系统计时器的精度就达到了。
http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx
使用这个类的好处是你肯定不会比上面的代码更糟糕。如果在高分辨率,你会得到更多的准确性。
但是,如果您正在尝试衡量效果并更好地了解您的服务,那么就有更好的工具。
例如,perfview是一个很好的工具: