【问题标题】:Asp.net PreRenderComplete taking a long time to finishAsp.net PreRenderComplete 需要很长时间才能完成
【发布时间】:2015-10-21 03:16:49
【问题描述】:

我遇到了一个问题,即特定页面上的按钮单击事件偶尔会出现缓慢的性能。有时它在正常参数下表现良好,但似乎只要服务器处于中等负载下(这意味着我可以在我们的生产环境中而不是在我们的开发或测试环境中产生这个问题)它似乎只是挂起。启用跟踪后,我看到它似乎只是挂在 Begin PreRenderComplete 和 End PreRenderComplete 之间。它只是在那里停留了近 30 秒。我没有在该事件空间中执行的任何特定代码。我的理解是,这个事件应该是生命周期中的一个非事件,因为它只是为了确保 PreRender 阶段完成。此页面有大量控件,因此具有相当大的视图状态,但我的理解是视图状态是在 LoadState 和 SaveState 事件中处理的,这似乎不是占用我所有时间的阶段。

我已经对服务器运行 perfmon,有时当我能够产生这种行为时,系统资源是正常的,没有请求排队。我试图了解导致这种缓慢的幕后可能发生的操作。

【问题讨论】:

    标签: asp.net webforms


    【解决方案1】:

    页面上是否有任何异步操作?我认为异步调用将在该事件之前完成,因此如果其中一些需要一段时间,例如缓慢的数据库或缓慢的网络调用,这可能会导致您看到的延迟。

    【讨论】:

    • 我在页面上没有看到任何看起来像异步操作的内容。您是说在 PreRenderComplete 阶段会处理异步事件吗?
    • @user1778199 我相信异步事件会在 PreRenderComplete 之前完成,如果我是对的,这可能表明缓慢的异步请求正在“阻止”该事件。但如果没有异步,那可能就不是了。
    • 这就是我对异步事件时间的看法,但奇怪的是我的时间在 Begin PreRenderComplete 和 End PreRenderComplete 之间,除非我有特定的代码在那个阶段应该几乎什么都不做?
    【解决方案2】:

    我想我找到了问题所在。通过更深入的分析,似乎我的 ScriptManager 控件导致尝试组合脚本时出现延迟。显然这只会在负载下出现问题,并且大多数发生在 prerendercomplete 事件中。通过设置 CombineScripts="false" 属性,它似乎已经解决了这个问题。

    【讨论】:

    • 你到底是怎么设置CombineScripts="false"的?
    猜你喜欢
    • 2018-02-07
    • 2016-07-30
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多