2010-02-24 25 views
1

是否需要設置爲Nothing(在Dispose()中)所有WithEvents字段?Nothing,WithEvents字段和內存泄漏

顯然Handles關鍵字將處理程序添加到這些字段,但不刪除它,直到此字段不是Nothing,這可能會產生內存泄漏?!。

這應該是特別實際的情況下,像

class Foo 
{ 
    Private WithEvents _bar as Bar 

    Public Sub New(ByVal bar as Bar) 
     _bar = bar 
    End Sub 

    Private Sub Bar_Changed(ByVal sender as Object, _ 
     ByVal e as EventArgs) Handles _bar.Changed 
    '... ' 
    End Sub 
} 

回答

3

這可以產生內存泄漏,如果要您訂閱對象的生活比用戶更長時間。在大多數情況下,這不是事實。

以WinForms爲例。通常,您會在WinForm應用程序的控件中看到WithEvents修飾符。外層Form類訂閱並響應這些事件。這不會導致內存泄漏,但因爲您訂購的產品Control實例的壽命與訂購者的壽命大致相同,所以它們的壽命爲Form

如果生命期確實不同,那麼將字段設置爲Nothing將導致您取消訂閱該事件並防止可能的內存泄漏。