ASP.net-如何区分页面处理时间和客户端传输时间

时间:2020-03-05 18:55:39  来源:igfitidea点击:

Weblog中的单个计时列自然包括客户端传输计时。为了进行分析,我想将花费大量构建时间的页面与仅具有慢速客户端的请求区分开。

对于缓冲的页面,我查看了ASP.NET页面生命周期模型,但没有看到在何处可以进入并以代码方式仅测量页面刷新到客户端之前的页面处理时间。

我可能应该提到我的目标是生产监视(而不是测试或者开发)。另外,目的是用此度量来注释Web日志,以供以后分析。当前,我们使用Response.AppendToLog()自由地注释Weblog。我相信使用Response.AppendToLog()的愿望在某种程度上限制了我潜在的日志点,例如,在Application_EndRequest中,响应对象不可行。

任何见识将不胜感激。

解决方案

回答

简便的方法可能是使用global.asax文件中的follow事件:

受保护的void Application_BeginRequest(Object sender,EventArgs e)
受保护的void Application_EndRequest(对象发送者,EventArgs e)

我们还可以实现自定义httpmodule

回答

这取决于我们所拥有的性能工具的功能集。但是,如果我们只需要记录处理时间,则可以采用这种方法。

  • 在HttpApplication.BeginRequest事件中记录开始时间。
  • 在HttpApplication.PreSendRequestContent事件中记录经过的时间。

如果只需要特定页面,则可以在BeginRequest事件中进行检查。
可以在Global.asax中添加应用程序事件。

回答

如果我们要登录特定页面,我相信asp.net页面的生命周期以PreInit开始,以Disposed结尾,因此我们可以在这些事件中记录任何我们想要的东西。

或者,如Bob Dizzle所指出的那样,如果我们想登录每个页面,则可以使用Global.asax文件,该文件有上千个事件可供选择:http://msdn.microsoft.com/zh-cn/library /2027ewzw.aspx

回答

我们可以在其他两个答案中提到的BeginRequest和PreSendRequestContent中使用秒表,也可以在PreSendRequestContent中使用请求的时间戳。

例如,在SingingEels上,我将此添加到了母版页的底部(是的,这是一个hack):`<%= DateTime.Now.Subtract(HttpContext.Current.Timestamp).TotalSeconds%>``

这样,我可以看到任何页面在服务器上实际执行所花费的时间,包括访问数据库等。

回答

我们也可以在Web服务器上进行测试。然后,ClientTransmission时间实际上变为0。