我想在我的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等,但我希望我的用户可以轻松访问这些信息。
答案 0 :(得分:3)
我会在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 :(得分:1)
感谢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>");
}
答案 2 :(得分:-1)
Page.LoadComplete可以帮到你。如果您在Page_Load事件处理程序中启动计时器并在LoadComplete事件处理程序中将其停止,那么您可能会获得实际时间。