Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET监控页面加载性能(无代码更改)_Asp.net_Performance_Monitoring - Fatal编程技术网

ASP.NET监控页面加载性能(无代码更改)

ASP.NET监控页面加载性能(无代码更改),asp.net,performance,monitoring,Asp.net,Performance,Monitoring,我在寻找一种方法来监控系统中每个页面的页面负载,以计算从请求到发送回用户的数据结束之间的时间间隔 我希望在服务器端完成这项工作,我不想对应用程序代码进行任何代码更改。如果需要更改应用程序代码,是否有标准的地方进行更改?我想使用某种web.config类型的参数,将信息记录到位置/数据库中。我们可以做处理部分,只是需要一些原始数据 我希望收集的信息是: 页面名称(包括查询字符串) 请求的日期时间 花费的时间 关于请求的任何其他信息,我们都可以得到 显然,前提是它不应该影响性能 我也在寻找一些低成本

我在寻找一种方法来监控系统中每个页面的页面负载,以计算从请求到发送回用户的数据结束之间的时间间隔

我希望在服务器端完成这项工作,我不想对应用程序代码进行任何代码更改。如果需要更改应用程序代码,是否有标准的地方进行更改?我想使用某种web.config类型的参数,将信息记录到位置/数据库中。我们可以做处理部分,只是需要一些原始数据

我希望收集的信息是:

  • 页面名称(包括查询字符串)
  • 请求的日期时间
  • 花费的时间
  • 关于请求的任何其他信息,我们都可以得到 显然,前提是它不应该影响性能

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

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


    我们目前使用的是IIS 6.0,但是,如果这类功能更高效,并且/或者在IIS 7.0/7.5中开箱即用,那么它可能会加快向这一方向的移动,因此很高兴听到这些建议。

    你能触摸global.asax吗?您可以在接收请求、完成请求、失败请求等时覆盖应用程序事件


    根据需要,您还可以尝试解析IIS日志,因为您可以在其中添加一些性能指标。

    您可以始终在web.config中使用选项pageOutput=“false”启用跟踪

    然后,您可以转到trace.axd查看特定请求的信息


    您也可以通过在@page指令中设置特定页面来完成此操作。

    这不是WebForms问题,而是ASP.net问题。使用
    global.asax
    IHttpModule
    钩住
    BeginRequest
    /
    EndRequest
    事件跟踪请求所需的时间

    秒表模块.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,但选择权在你

    我要寻找的是某种方法来监控每个 系统中的页面,以计算请求和 发送回用户的数据的结尾是

    我想知道IIS日志的time take字段是否有用,因为它将为您提供时间、IP、字节(发送/接收)等


    有关其他信息,请参见

    您正在运行哪个版本的IIS?IIS 7目前有内置的功能。6.0,但我们正在考虑在某个时候升级到7.5,因此信息7功能将是有用的(虽然没有考虑到这个问题的答案,对不起)。@JohnSaunders你能指出页面统计信息在IIS7中的位置吗?我找不到任何类似的东西(在IIS 7.5、Windows Server 2008 R2中),请参见我知道此类数据可用于失败的请求跟踪。我相信您可以定义“失败”的构成,这样您就可以为所有请求获取此信息。当然还有更多的可能。如果不需要重新编译应用程序代码,那么是的,您可以提供任何链接以及如何实现这一点吗?性能会如何,它是否与请求本身脱节?这会影响正在发生的实际请求吗?还有,上下文的生命是什么,它是一个单独的页面吗?我假设我也应该能够获得会话信息?我将此标记为答案,因为这是我们决定的方式,即使我没有收到作者的回复。这与请求本身是一致的,您可以访问整个上下文。请求、响应、会话等。有关如何将其融入应用程序结构的更多信息,请研究asp.net管道。这是.net中所有http开发的核心。webforms、mvc等都构建在asp.net管道之上。