鑑於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