3

我想在我的 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 等,但我希望我的用户能够轻松访问这些信息。

4

3 回答 3

3

I would do it in the 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("...");
}

Or write it to a session and read in your master page.

于 2013-03-13T11:17:32.087 回答
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>");
}
于 2013-03-13T12:05:08.903 回答
-1

Page.LoadComplete 可以帮助您。如果您在 Page_Load 事件处理程序中启动计时器并在 LoadComplete 事件处理程序中停止它,那么您可能会得到实际时间。

于 2013-03-13T11:22:19.293 回答