我目前正在开发一个使用MasterPage
的ASP.NET应用程序,我想测量我的应用程序webform的加载时间并将该信息显示给客户端。
我当前的策略涉及使用Application_BeginRequest
事件关联回调(在我的网站解决方案的Global.asax
文件中),开始测量服务器端进程所花费的时间(如下所示)
protected void Application_BeginRequest(Object sender, EventArgs e) {
Context.Items.Add("Request_Start_Time", DateTime.Now);
}
并计算webform的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>";
}
这是测量加载时间的最佳方法吗?是否有更“优雅”的方式来实现这一目标?
提前感谢您的时间和合作。
答案 0 :(得分:7)
&lt;%@ Page Trace =“true”%&gt; (或在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
这假设“您的客户”需要深度调试数据。
答案 1 :(得分:4)
你的appproach似乎足够精确,只要你不渲染非常大的控制树并且你不使用服务器控件来完成他们在被覆盖的Render
方法中的所有工作(没有经验的服务器控制作者倾向这样做......)。
在这种情况下,实际上有一种渲染实际渲染时间的方法;-)只需使用HttpResponse.Filter
对象用占用时间填充占位符。这些过滤器在呈现Web表单之后以及在进入客户端之前应用。
如果您只需要进行开发,请搜索trace.axd
,这将不仅为您提供有关时间的详细信息,还会提供有关请求上下文,控制树结构和页面大小的详细信息。
答案 2 :(得分:1)
这实际上取决于您希望实际显示的指标。
这两者的答案将决定录制时最有意义的内容。如果你的目标是#1,那么我会说你的方法有效。如果你想要2号,我可以看看Erwin有什么。