我的团队成员在ASP.NET Web应用程序中浏览了几页,并将一些OnLoad覆盖更改为page_load事件,但他没有删除对base.OnLoad()的调用。
这个:
Public void override OnLoad()
{
//stuff
base.OnLoad();
}
对此:
Public void Page_Load(object sender, EventArgs e)
{
//stuff
base.OnLoad();
}
注意:如果有语法错误,我道歉,我不在具有实际源代码的计算机上。
当我们将代码推送到实时服务器时,我们开始遇到IIS app_pool每45分钟到一小时崩溃的问题。我们仍然不完全确定这是问题,但我很好奇从哪里调用page_load事件。它们是否从system.web.ui.page中的OnLoad方法调用?如果是这样,那么我认为这会导致无限循环并最终耗尽内存并导致app_pool崩溃。
这可能是我们麻烦的原因吗?
base.OnLoad();
导致Load
事件被提出。这将导致您的页面的OnLoad
事件处理程序被引发,其中包含再次调用OnLoad
。您发布的代码确实不正确。
MSDN上的ASP.NET Page Life Cycle Overview文章很好地解释了页面加载和其他事件的工作原理。
即使它不会导致无限循环,更改从覆盖基本虚拟方法到处理事件的决定也不是一个聪明的决定。我建议你覆盖,而不是担心无限循环。它让你担心的事实表明,压倒是一个更好的选择。
阅读第30项:更喜欢来自有效C#的事件处理程序覆盖Bill Wagner。