2009-09-08 124 views
13

我目前正在开发一个使用MasterPage的ASP.NET应用程序,我想测量我的应用程序webform的加载时间并将该信息显示给客户端。测量ASP.NET页面加载时间

我目前的策略包括使用Application_BeginRequest事件相关联的回调(在Global.asax文件我的网站解决方案),开始花费在服务器端处理的时间测量(如下)

protected void Application_BeginRequest(Object sender, EventArgs e) { 
    Context.Items.Add("Request_Start_Time", DateTime.Now); 
} 

并计算在Web窗体的OnPreRender事件相关联的回调所经过的时间,打印出来的占位符元素(如下)

protected override void OnPreRender(EventArgs e) { 
    base.OnPreRender(e); 

    TimeSpan tsDuration = DateTime.Now.Subtract((DateTime)Context.Items["Request_Start_Time"]); 
    ExecutionTime.InnerHtml = "<em>Server-side processing duration: " + tsDuration.TotalMilliseconds + " miliseconds.</em>"; 
} 

这是衡量加载时间的最佳方式?是否有更“优雅”的方式来完成这个?

在此先感谢您的时间和合作。

回答

7

<%@页跟踪=“真正的”%>(或在web.config中设置此)

启用跟踪和检查出的trace.axd的信息(在你的网站的根目录)。

Trace.Write("Start time intensive task"); 
Trace.Write("Stop time intensive task"); 

http://msdn.microsoft.com/en-us/library/bb386420.aspx

这是假设 “你的客户” 想深调试数据:

然后,你可以设置时间点。

+0

正如我所说的,我使用的是母版页,我没有弄清楚如何启用Trace,因为它似乎没有“Trace”属性。你能帮我解决这个问题吗? – XpiritO 2009-09-09 10:08:17

+0

您不需要逐页打开跟踪,只需在您的web.config中执行,并且它适用于所有页面:http://msdn.microsoft.com/en-us/library/6915t83k.aspx但是请不要将此设置保留为生产! – realMarkusSchmidt 2009-09-09 10:34:34

+0

@markus“此主题不再可用”@ http://msdn.microsoft.com/en-us/library/6915t83k.aspx – Zack 2015-01-08 15:04:26

1

这实际上取决于您希望实际显示的指标。

  1. 这是一个整体“页面加载在__秒”类型的东西,将在那里所有的时间?
  2. 这是为了确定您的编码解决方案是否满足客户的要求,而不是生产所需?

这两个答案将决定什么是最重要的,当涉及到录音。如果你的目标是#1,那么我会说你的方法有效。如果你打算2号,我可以看看欧文有什么。

4

您的appproach似乎足够准确,只要您不渲染非常大的控制树,并且不使用服务器控件在覆盖的Render方法中执行所有工作(未经验的服务器控件作者往往会精确地那...)。

在这种情况下,实际上有一种渲染实际渲染时间的方法;-)只需使用一个HttpResponse.Filter对象来用占用的时间填充占位符。这些过滤器在之后应用Web表单呈现并且在它到达客户端之前。

如果您只是为了开发而需要此搜索,请搜索trace.axd,这不仅会为您提供很多关于时序的细节,还包括请求上下文,控制树结构和页面大小。