2010-02-23 79 views
2

我有一個內存泄漏問題。在TopClass的類實例超出範圍之前,obj的實例是否有資格進行垃圾收集?這是否會導致內存泄漏(在.NET中)?

public class TopClass 
{ 
    public void MyFunction() 
    { 
    TestClass obj = new TestClass(); 
    obj.PropertyChanged += (s,e) => { //Do some code }; 
    obj = null; 
    } 
} 

此外,這將使實例化一個TopClass和調用MyFunction()的所有對象不符合GC的條件嗎?

我明白,在託管代碼中,一旦應用程序超出範圍,那麼所有的對象都符合條件,但我想知道我的應用程序正在運行,這將導致內存泄漏。對?

回答

4

不可以。 obj將被收集好。此代碼中沒有任何內容引起強烈的引用。

對象可以通過附加爲事件處理程序來保持活動狀態,但是通過擁有事件處理程序,對象無法保持活動狀態。

+0

是的,TestClass實例可以在調用MyFunction之後(或者甚至在此期間)被收集。 – Steven

3

obj只要您將其設置爲null(但實際的收集將在當然後面完成),就有資格進行垃圾回收。訂閱PropertyChanged事件不會創建對obj的引用,它會創建從obj到TopClass實例的引用。並且它也不會阻止收集TopClass實例,除非它在別處被引用。

相關問題