ASP.NET监控page_load性能(无需更改代码)

标签 asp.net performance monitoring

我正在寻找的是某种方法来监视系统中每个页面的page_load,以计算出请求与发送回用户的数据结束之间的时间间隔。

我希望做到 100% 服务器端,并且我不想对应用程序代码进行任何代码更改。如果需要更改应用程序代码,是否有标准位置可以进行这些更改?我正在考虑某种 web.config 类型参数,它将信息记录到位置/数据库。我们可以做处理部分,只需要原始数据。

我希望收集的信息是:

  1. 页面名称(包括查询字符串)
  2. 请求的日期时间
  3. 花费的时间
  4. 我们可以获取有关请求的任何其他信息!

显然,先决条件是它不应该影响性能。

我也在寻找低成本的东西,或者我们可以用来开发系统的方法。

其他信息: 更清楚地说,我们可以完全控制 IIS 和底层操作系统,但是,网站应用程序不在我们的控制范围内。我们可以更改配置文件,但不能更改应用程序的实际代码。

我们目前使用的是 IIS 6.0,但是,如果这种事情更高效,并且/或可以开箱即用,使用 IIS 7.0/7.5 那么它可能会加快向此方向的迁移,所以很高兴听到这些建议。

最佳答案

这不是 WebForms 问题,而是 ASP.net 问题。使用 global.asaxIHttpModule Hook 到 BeginRequest/EndRequest 事件来跟踪请求的持续时间需要。

StopWatchModule.cs

class StopWatchModule: IHttpModule
{
    private Int64 _requestStartTicks; 

    public void Init(HttpApplication application)
    {
         application.Context.BeginRequest += Application_BeginRequest;
         application.Context.EndRequest += Application_EndRequest;
    }

    private void Application_BeginRequest(object sender, EventArgs e)
    {
        _requestStartTicks = Stopwatch.GetTimestamp();
    }

    private void Application_EndRequest(object sender, EventArgs e)
    {
        Int64 requestStopTicks = Stopwatch.GetTimestamp();

        Double requestDurationMs = (Double)(requestStopTicks - _requestStartTicks) / Stopwatch.Frequency / 1000000f; 
        /* 
           Sample output:
           Request for "~/EditCustomer.aspx" took 37 ms to complete
        */
        HttpContext context = ((HttpApplication)sender).Context;
        Logger.Info("Request for \"{0}\" to {1} ms to complete", 
              context.Request.AppRelativeCurrentExecutionFilePath, 
              requestDurationMs.ToString("r", CultureInfo.InvariantCulture));
    }
}

Web.config

<configuration>
    <system.web>
        <httpModules>
            <add name="StopWatchModule" type="StopWatchModule" />
        </httpModules>
    </system.web>
</configuration>

我是凭内存写的,所以上面可能会有错误,但这就是想法。您的日志消息可以根据您的需要详细说明。 Logger 是某种类型的日志库。我更喜欢 log4net,但选择权在你。

关于ASP.NET监控page_load性能(无需更改代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8537596/

相关文章:

java - 如何仅进行 "n"比较从文本文件中查找最小值和最大值?

python - 如何监控 Python 文件的变化?

JQuery 无法在 ASP.NET 中运行

c# - 当客户端关闭连接时,IIS/ASP.NET 可以中止 HTTP 请求吗?

ASP.NET WebApi - HttpClient - 找不到方法

java - Selenium 中是否有比 findElement 方法更快的获取元素的方法?

c# - 网页上的富文本编辑器

Java 重绘在某些情况下很慢

linux - 配置文件发现意外的 $end,不知道为什么

java - 更改javamelody的存储目录