【问题标题】:Accurate way to measure request/response times of an Asp.Net MVC application测量 Asp.Net MVC 应用程序的请求/响应时间的准确方法
【发布时间】:2011-10-11 22:42:30
【问题描述】:

考虑在 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 偏移量。

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

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

【问题讨论】:

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


    【解决方案1】:

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

    http://miniprofiler.com/

    【讨论】:

    • 谢谢,我看看这个
    • 感谢 Druegor,这看起来非常好,但我采用了上面的方法 :-)
    • MiniProfiler 绝对是要走的路,但前提是您不能在 IIS 服务器上使用 New Relic Agent - newrelic.com/docs/dotnet
    【解决方案2】:

    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

    【讨论】:

    • 谢谢,我确实考虑过这一点,但是我必须在某个地方启动(并存储)秒表。 HttpContext.Current.Timestamp 是在管道的早期添加的,因此似乎是衡量响应时间的好地方。
    • 接受此作为答案,并将您的答案附加到解决方案中。
    猜你喜欢
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 2019-05-22
    • 2014-11-09
    • 2016-08-12
    • 1970-01-01
    相关资源
    最近更新 更多