如果在page_load事件中调用,base.OnLoad()会导致无限循环吗?

时间:2011-09-07 19:56:35

标签: c# .net asp.net webforms page-lifecycle

我的团队成员在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崩溃。

这可能是我们麻烦的原因吗?

2 个答案:

答案 0 :(得分:3)

base.OnLoad();会导致Load事件被引发。这将导致您的页面的OnLoad事件处理程序被引发,其中包含对OnLoad的再次调用。您发布的代码确实不正确。

MSDN上的ASP.NET Page Life Cycle Overview文章非常适合解释页面加载和其他事件的工作原理。

答案 1 :(得分:0)

即使它不会导致无限循环,更改从覆盖基本虚拟方法到处理事件的决定也不是一个聪明的决定。我建议你覆盖,而不是担心无限循环。它让你担心的事实表明,压倒是一个更好的选择。

阅读项目30:首选覆盖事件处理程序来自Bill Wagner的有效C#