我的团队成员在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崩溃。
这可能是我们麻烦的原因吗?
答案 0 :(得分:3)
base.OnLoad();
会导致Load
事件被引发。这将导致您的页面的OnLoad
事件处理程序被引发,其中包含对OnLoad
的再次调用。您发布的代码确实不正确。
MSDN上的ASP.NET Page Life Cycle Overview文章非常适合解释页面加载和其他事件的工作原理。
答案 1 :(得分:0)
即使它不会导致无限循环,更改从覆盖基本虚拟方法到处理事件的决定也不是一个聪明的决定。我建议你覆盖,而不是担心无限循环。它让你担心的事实表明,压倒是一个更好的选择。
阅读项目30:首选覆盖事件处理程序来自Bill Wagner的有效C#。