哪一对事件给我估计服务器渲染时间?

时间:2013-05-01 16:03:54

标签: asp.net performance

我在MasterPage构造函数中创建了一个秒表&启动它。我在PreRender中更新了一个标签,以显示服务器端的渲染时间。 (我在客户端设置了javascript计时器,是的,与服务器端渲染相比,客户端渲染是巨大的 - 但是我可以做更多关于服务器端时间的事情,如果它很高的话)

我在MasterPage中有计时器,这样我就可以在写入#毫秒时访问标签。

时间一直低于我在Page构造函数上设置计时器并在Page Unload事件上将时间写入控制台的时间。

那是什么解释了这一切?我是否需要将定时器的开始/停止移动到不同的事件?从页面构建到页面卸载的时间是否应该在服务器上呈现该页面所花费的时间内计算?

1 个答案:

答案 0 :(得分:1)

当您在master / page构造函数中启动Stopwatch并在Unload上完成它时,这意味着您正在测量页面生命周期的时间,我很难同意这是渲染(但是,它包括渲染),因为在页面生命期间你可以调用数据库/服务/其他东西到Thread.Sleep()

如果我们将“页面呈现”视为控件将数据写入Response.OutputStream的时间,那么我们应该采取其他方法。在调用第一个Render方法后开始ASP.NET Page Life Cycle Overview页面呈现,逻辑上在调用最后Render方法时结束。

  

在渲染之前,会为页面和所有控件保存视图状态。   在呈现阶段,页面为每个页面调用Render方法   控制,提供一个文本编写器,将其输出写入   页面的Response属性的OutputStream对象。

在我看来,为了测量页面生命周期的渲染部分,最好在页面的覆盖Render方法内开始和完成秒表。

protected override void Render(HtmlTextWriter writer)
{
    var stopwatch = Stopwatch.StartNew();
    base.Render(writer);
    stopwatch.Stop();
    // Set the value of rendering time in Page.Master
}

再次,为什么Render?从ASP.NET页面生命周期概述:

  

渲染:这不是一个事件;相反,在这个处理阶段,   Page对象在每个控件上调用此方法。所有ASP.NET Web   服务器控件有一个写出控件的Render方法   标记发送到浏览器。


但无论如何我不确定你为什么要手动测量它。如果跟踪为enabled,那么您可以通过trace.axd或直接在页面上评估页面事件持续时间(如果您在配置中启用了pageOutput