当您在主/页面构造函数中启动 Stopwatch 并在 Unload 上完成它时,这意味着您正在测量页面生命周期的时间,我几乎不能同意这是渲染(但是是的,它包括渲染),因为在页面生命周期中您可以调用数据库/服务/其他东西高达Thread.Sleep()
.
如果我们将“页面渲染”视为控件将数据写入Response.OutputStream的时间,那么我们应该采取其他方法。遵循ASP.NET 页面生命周期概述页面呈现在调用第一个Render
方法时开始,逻辑上它在调用最后一个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
}
同样,为什么要渲染?来自 ASP.NET 页面生命周期概述:
渲染:这不是一个事件;相反,在这个处理阶段,Page 对象在每个控件上调用此方法。所有 ASP.NET Web 服务器控件都有一个 Render 方法,该方法写出控件的标记以发送到浏览器。
但无论如何,我不确定你为什么要手动测量它。如果启用了跟踪,那么您可以通过trace.axd或直接在页面上评估页面事件持续时间(如果您pageOutput
在配置中启用)。