请考虑以下用于测量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开始,
The timestamp returned from the
Timestamp
property is the local time of the server and is set during the instantiation of theHttpContext
object. The local time is equal to the UTC time plus the UTC offset.
理论上,上面的代码应该以毫秒为单位给出总的请求/响应时间.
我的问题是,这将是多么准确?还有更准确/更好的方法吗?
解决方法
StopWatch类的精度可能低至几微秒,具体取决于硬件和操作系统.如果您处于高分辨率模式,则可以读取IsHighResolution属性.如果没有,那么你的系统计时器的准确性就达到了.
http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx
使用这个类的好处是你肯定不会比上面的代码更糟糕.如果在高分辨率,你会得到更多的准确性.
但是,如果您正在尝试衡量性能并更好地了解您的服务,那么就有更好的工具.
例如,perfview是一个很好的工具: