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

问题描述 投票:-2回答:2

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

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

c# .net asp.net webforms page-lifecycle
2个回答
3
投票

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

MSDN上的ASP.NET Page Life Cycle Overview文章很好地解释了页面加载和其他事件的工作原理。


0
投票

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

阅读第30项:更喜欢来自有效C#的事件处理程序覆盖Bill Wagner。

© www.soinside.com 2019 - 2024. All rights reserved.