提问人:Gordon Copestake 提问时间:3/13/2013 更新时间:3/13/2013 访问量:785
在母版页的页脚中添加页面加载字符串 ASP.NET
Adding a page load string in footer of ASP.NET masterpage
问:
我想在我的 ASP.NET 应用程序的页脚中添加一个标签,向我的用户显示每个页面加载所需的时间。在我的页面中,我目前有:site.master
public partial class SiteMaster : MasterPage
{
public Stopwatch pageLoadTime = new Stopwatch();
protected void Page_Load(object sender, EventArgs e)
{
pageLoadTime.Start();
//Other stuff here
pageLoadTime.Stop();
TimeSpan ts = pageLoadTime.Elapsed;
// Format and display the TimeSpan value.
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10);
PageLoadTimeLabel.Text = "Page loaded in " + elapsedTime;
}
但这并没有给我一个“真正的”页面加载时间,即使一个页面需要 5 秒才能加载,它也会返回 0.1 秒。所以我将结束代码移到了该部分,但这无法更新它看起来的标签。Page_LoadComplete
有什么建议吗?我知道我可以使用 firebug 等,但我希望我的用户可以轻松访问这些信息。
答:
3赞
Linus Caldwell
3/13/2013
#1
我会在:global.asax
private DateTime start_time
protected void Application_BeginRequest(object sender, EventArgs e)
{
start_time = DateTime.Now;
}
protected void Application_EndRequest(object sender, EventArgs e)
{
var duration = DateTime.Now - start_time;
Response.Write("...");
}
或者将其写入会话并在母版页中阅读。
-1赞
PM.
3/13/2013
#2
Page.LoadComplete 可以帮到你。如果在事件处理程序中启动计时器Page_Load并在 LoadComplete 事件处理程序中停止计时器,则可能会获得实际时间。
1赞
Gordon Copestake
3/13/2013
#3
感谢 Linus,我创建了这个,它做了我想要的:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
Context.Items["loadstarttime"] = DateTime.Now;
}
然后
public void Application_EndRequest(object src, EventArgs e)
{
DateTime end = (DateTime)Context.Items["loadstarttime"];
TimeSpan ts = DateTime.Now - end;
// Format and display the TimeSpan value.
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10);
Response.Write("<div style='text-align: center' class='thesmallprint'>Page loaded in: " + elapsedTime + "</div>");
}
评论