2011-11-10 33 views
0

對於ViewModel中的屬性,可以將屬性定義爲(c#): private MyClass _myclass;如何清理內存的屬性?

public MyClass Myclass{ 
    get { return _myclass;} 
    set { 
     if(value!=_myclass) 
     { 
     _myclass = value 
     RaisePropertyChanged("Myclass"); 
     // do something else..... 
     } 
    } 
} 

然後我想釋放內存時,不再使用實例。什麼是正確的方式?

_myclass = null; 
RaisePropertyChanged("Myclass"); 

Myclass = null; 

_myclass = null; 
Myclass = null; 
+1

讓它成爲一個IDisposable? – BoltClock

+0

是的,這是我想要的。 – KentZhou

+1

如果實例不再被使用(任何代碼都沒有引用它),它將被自動GCed,所以你不需要自己分配'null',如果MyClass使用文件這樣的資源實現IDisposable並且明確地配置 – sll

回答

0

你的第二個選項應該正常工作。

Myclass = null; 

第一個選項是不必要的非DRY。第三個選項不會引起PorpertyChanged

1

你不能真正確定什麼時候你的對象的內存將被釋放(這是垃圾收集器決定的),但當然只有當沒有更多引用時纔會釋放它。您應該使用屬性集訪問器將其設置爲null。它會爲您提出更改通知。

Myclass = null; 

注意:這適用於純託管類。如果您的班級使用非託管資源,則需要實施IDisposable。