Asp.net PreRenderComplete花费很长时间才能完成

Asp.net PreRenderComplete花费很长时间才能完成

问题描述:

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

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

页面上是否存在异步操作?我认为异步调用将在该事件之前完成,因此如果其中一些需要一段时间,比如数据库速度慢或网络呼叫速度较慢,可能会导致延迟。

+0

我在页面上看不到任何异步操作。你是否说在异步事件会在PreRenderComplete阶段处理? – user1778199 2013-02-26 19:01:02

+0

@ user1778199我相信异步事件会在* PreRenderComplete之前完成,如果我是对的,那么可能表明缓慢的异步请求会“阻止”该事件。但如果没有异步,那可能不是。 – Eilon 2013-02-26 19:46:40

+0

这就是我认为的异步事件的时间,但奇怪的是我的时间是介于Begin PreRenderComplete和End PreRenderComplete之间,除非我有特定的代码应该在该阶段没有做任何事情的时候正确地做? – user1778199 2013-02-26 20:12:26

我想我已经找到了问题。通过更深入的分析,似乎我的ScriptManager控件导致了尝试组合脚本的延迟。显然,这只在加载时出现问题,大部分发生在prerendercomplete事件中。通过设置CombineScripts =“false”属性,它似乎清除了这个问题。

+0

你究竟是如何设置'CombineScripts =“false”'? – 2015-09-03 16:52:14