2011-10-18 118 views
6

reference page爲Application.ThreadException說Application.ThreadException:內存泄漏是否不分離?

因爲這是一個靜態事件,您必須分離的事件處理程序 當你的應用程序設置,或內存泄漏將導致。

儘管該頁面上的示例代碼並未分離事件處理程序,但事件處理程序未分離時是否真的泄漏?

似乎應該關閉處理程序的唯一時間是分離處理程序。在這種情況下,無論處理程序是否分離,應用程序使用的所有內存都將被釋放?

+3

是的,在應用程序終止前一毫秒不註銷您的事件處理程序不是泄漏。 –

回答

4

這可能是非常罕見的,但WinForms應用程序的Main()方法可能可能,出於某種原因,是這樣的:

static bool AbortStartup { get; set; } 

[STAThread] 
public static void Main() 
{ 
    Application.Run(new CancelableSplashScreen()); 

    if (!AbortStartup) 
     Application.Run(new MainWindow()); 
} 

當啓動畫面關閉時,會出現主窗口,除非啓動畫面將AbortStatup屬性設置爲true。如果您在啓動畫面中向Application.ThreadException添加了事件處理程序,則CancelableSplashScreen的實例將不會被垃圾收集,直到應用程序終止,這可能在相當長的一段時間後。

1

如果你讓對象的引用去(假設它是一個實例方法是事件處理程序),那麼是的,會有泄漏;您將無法取消訂閱該事件(因爲您沒有該實例了),並且該對象將存在,直到應用程序域結束(因爲這是靜態變量的生存期)。