鉴于WebForm中的所有控件都在每次回发结束时被销毁(通过我的了解),您是否需要“取消”任何可能具有的事件处理程序有线吗? (假设你要停止处理事件,并允许GC)所以您是否需要在ASP.NET webforms中“unwire”事件处理程序
例如:
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Do I need to remove this handler?
btnSubmit.ServerClick += btnSubmit_ServerClick;
}
}
事件处理程序不以任何方式延长事件对象的生命周期,只要具有事件的对象处于活动状态,它就会延长具有处理程序的对象的生命周期,因此您描述的情况是不可能的。你拥有的对象必须既是引用页面(而不是其他方式)。 – Servy
简单的错字 - 订阅对象的事件(而非处理程序)。纠正。相信我,我已经有了!dumpheap来证明泄漏!干杯:)在会话中订阅对象上的事件意味着该对象将引用返回到页面,并保持活动状态。 –
为事件订阅事件处理程序不会导致处理程序具有对定义事件的对象的引用的对象。你可以在你的情况下明确地创建这样的参考;这很容易做到,但事件订阅并不一定会发生,这意味着取消订阅事件处理程序也不会消除您的问题。现在,如果您的页面实例为长期存在的其他对象订阅了一个事件处理程序,那么只要该另一个对象在附近,* that *就会保留该页面,但这是一种不同的情况。 – Servy