【问题标题】:Capturing ASP.Net Server Execution time without Network Latency在没有网络延迟的情况下捕获 ASP.Net 服务器执行时间
【发布时间】:2010-11-19 17:18:12
【问题描述】:

我需要记录 ASP.net 在我的应用程序中执行每个页面请求所花费的时间,但我需要排除任何网络延迟。我目前正在通过使用 StopWatch 类并在页面生命周期的 OnInit 方法期间启动秒表并在 Unload 方法完成后停止它来捕获渲染时间。 Unload 方法似乎包括将请求发送到客户端所需的时间,因此包括任何互联网/网络延迟。我可以在页面生命周期中停止秒表的最后一个可能点是什么,其中不包括将请求发送到客户端所需的时间。会直接在 Unload 事件之前吗?

相关问题:ASP.net 是否在开始向客户端发送响应之前完成构建响应?还是在形成响应时开始异步发送?

我目前正在使用带有 IIS 5 的 ASP.Net 2.0。

我的所有页面都继承自一个类中的此代码:

readonly Stopwatch _serverExecutionTime = new Stopwatch();

protected override void OnInit(EventArgs e)
{
    _serverExecutionTime.Start();
    base.OnInit(e);
}    

protected override void OnUnload(EventArgs e)
{
    _serverExecutionTime.Stop();
    base.OnUnload(e);
}

更新

我尝试在 OnRender 方法结束、OnUnload 方法开始和 OnUnload 方法结束时捕获执行时间。在所有三种情况下,时间差最多为 1 毫秒。即使从欧洲的客户端到美国的服务器进行测试,时间也是相同的。所以我认为我在这里遗漏了一些东西。

【问题讨论】:

    标签: asp.net page-lifecycle


    【解决方案1】:

    如果 Response.BufferOutput 设置为 true,则 .Net 将等到页面处理完成后再将 html 发送回客户端。

    如果它是假的,那么 .Net 会尽快开始发回数据。

    Response.Flush 通常会刷新缓冲区。

    我见过的在忽略延迟的情况下测试站点性能的最佳方法是让发出请求的机器与服务器位于同一网段。通常插入同一个路由器/交换机。到那时,您将延迟降低到足够低,以至于它只是您计算的一小部分。请注意,您不想直接在服务器本身上进行测试,因为这会导致处理时间被分开来运行您的客户端。

    更新(来自 cmets)
    这比评论长一点。

    Jon,您确定您还没有消除延迟这一因素吗?为了检测到它,您必须确保在运行每个测试之前清除本地 Web 缓存和 DNS 缓存。如果所有这些都被缓存并且剩余的数据量非常小,那么它不会真正对服务器的位置产生太大影响。假设页面的不可缓存部分只有 4KB。您不会注意到 2MB 连接与 ISDN 线路在页面速度方面有太大差异。

    您可以查看this question 以了解如何测试各种延迟级别。我知道你想消除所有延迟作为一个因素,但你可能会考虑从不同的角度来解决这个问题。即,检查高延迟和低延迟连接之间的差异。这应该会为您提供大量信息,以便从您真正想要的值中剔除这些时间。

    【讨论】:

    • 同意在同一网段发出请求。但就我的代码示例而言,在 base.OnUnload 之前捕获时间的最佳位置是什么?
    • @Jon:我会在卸载事件开始或渲染事件结束时对其进行测试。
    • 我试图捕获卸载事件前后的值。即使在美国和英国的服务器上,这两次也几乎相同。时间最多相差 1 毫秒。不幸的是,这对我没有帮助。您还有其他想法吗?
    【解决方案2】:

    只需打开 ASP.NET 跟踪:http://msdn.microsoft.com/en-us/library/ms972204.aspx 它显示每个方法和整个页面的执行时间。

    【讨论】:

    • 我知道我可以使用跟踪,但我需要物理捕获我的生产站点的执行时间。我会将它们记录到数据库中。我无法在生产环境中使用跟踪。
    【解决方案3】:

    IIS 日志文件花费了处理请求的时间。这将包括调用您的方法不会记录的 .Net 所需的任何时间。

    【讨论】:

    • 谢谢,但实际上我想排除一部分时间。我想消除所有可能的网络延迟。
    猜你喜欢
    • 1970-01-01
    • 2012-01-24
    • 2013-02-18
    • 2010-09-14
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    相关资源
    最近更新 更多