将基地.如果在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崩溃。
这会是我们麻烦的原因吗?
base.OnLoad();
会引发Load
事件。这将导致引发页面的OnLoad
事件处理程序,其中再次包含对OnLoad
的调用。你发布的代码确实不正确。
MSDN上的"ASP.NET页面生命周期概述"一文很好地解释了页面加载和其他事件的工作原理。
即使它不会导致无限循环,从覆盖基本虚拟方法到处理事件的更改决策也不是明智的。我建议您重写,而不是担心无限循环。事实上,它让你担心,这表明压倒一切是一个更好的选择。
阅读Bill Wagner的有效C#中的Item 30:Prefer Overrides to Event Handlers。