【问题标题】:Global timing of ASP.Net pagesASP.Net 页面的全局时序
【发布时间】:2009-03-18 01:39:45
【问题描述】:

我刚刚继承了一个由其他人编写的网站 (ASP.Net 2.0),我需要维护它。
这段代码并不可怕,但它有很多东西让网站运行得非常慢。

我有一个想法来监控这个,我想看看更有经验的开发者是怎么想的。

我现在的目标是找出页面加载时间过长的时间,将注意力集中在这些地方。

我正在考虑在 Global.asax 中挂钩 PreRequestHandlerExecute 和 PostRequestHandlerExecute 事件,并在“Pre”中创建一个 StopWatch,将其附加到 HttpContext.Items,并在“Post”中读取它,如果请求超过,比如说,100ms,它会报告给我让我知道。

一些“伪代码”是:

protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e) {
    System.Diagnostics.Stopwatch theTimer = new Stopwatch();
    theTimer.Start();
    HttpContext.Current.Items.Add("RequestTimer", theTimer);
}

protected void Application_PostRequestHandlerExecute(Object sender, EventArgs e) {
     Stopwatch theTimer = (Stopwatch) HttpContext.Current.Items["RequestTimer"];
     System.Diagnostics.Debug.WriteLine(theTimer.ElapsedMilliseconds + "@: " + HttpContext.Current.Request.RawUrl)
}

您如何看待这种方法?
这样做合理吗?
它会让我的网站爬行吗?
有一个更好的方法吗?

一些想法:
- 获取 DateTime.Now.Ticks 并存储它可能会更好,这可能会比秒表更轻
- 我知道最好让所有页面都从我自己的页面继承,并留在那里,但我不想浏览几十个页面并全部更改。

非常感谢任何想法! 谢谢!

【问题讨论】:

    标签: asp.net global-asax timing


    【解决方案1】:

    更好的方法是启用tracing

    【讨论】:

    • 对,但我不想一直看着追踪。我想解决我发现的瓶颈,然后让网站运行,让它在特别慢的时候给我发一封电子邮件。我想,我无法通过追踪来做到这一点。
    【解决方案2】:

    我不会这样做。这将比它的价值更麻烦。有一些很好的 ASP.NET 分析工具,例如 CLR Profiler 和 Red Gate 的 ANTS Profiler。

    【讨论】:

    • 分析的问题在于它使运行时性能非常糟糕。我想让这段代码运行并让它在某些事情比它应该的慢时通知我。我不能有一个带有分析器的实时网站。
    • 是的,我知道用“生产”代码来做这件事有多糟糕,但老实说,当我得到它时,它已经在生产中了,所以我对此无能为力。
    • 您特别想着什么样的麻烦?您认为这会产生异常还是减速?还有什么?
    • 麻烦很多的工作没有很多好处。您可以通过生成负载并对其进行分析来在测试中执行此操作,而不是在生产中。如果需要,您可以使用 WebLoad 之类的东西来生成负载。
    【解决方案3】:

    我不会弄乱秒表,而是将开始时间扔到 HttpContext 集合中并将其拉回。然后您可以在请求结束时执行一个简单的减法,这对性能的影响可以忽略不计。

    【讨论】:

      【解决方案4】:

      正如 BobbyShaftoe 所说,剖析是您最好的选择。但也要考虑 JetBrains 的 dotTrace;非常非常好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-05
        • 1970-01-01
        • 1970-01-01
        • 2010-11-02
        • 2010-10-29
        相关资源
        最近更新 更多