将基地.如果在page_load事件中调用OnLoad(),则会导致无限循环

本文关键字:OnLoad 无限循环 调用 如果 page 事件 load | 更新日期: 2023-09-27 18:07:59

我的团队的一名成员浏览了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崩溃。

这会是我们麻烦的原因吗?

将基地.如果在page_load事件中调用OnLoad(),则会导致无限循环

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

MSDN上的"ASP.NET页面生命周期概述"一文很好地解释了页面加载和其他事件的工作原理。

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

阅读Bill Wagner的有效C#中的Item 30:Prefer Overrides to Event Handlers