2011-11-10 4 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

MyClassがIDisposableを実装して明示的に破棄するリソースのようなリソースを使用する場合、インスタンスがもう使用されていない(コードが参照していない)場合は自動的にGCされますので、nullを自分で割り当てる必要はありません – sll

答えて

0

あなたの2番目のオプションは、正常に動作する必要があります。

Myclass = null; 

最初のオプションは、不必要にDRYではありません。そして3番目のオプションは、PorpertyChangedを上げません。

1

あなたのオブジェクトのメモリがいつ解放されるのか(それはガベージコレクタが決定するためです)、実際にはそれが参照されていない場合にのみ解放されます。プロパティセットアクセサを使用してnullに設定する必要があります。それはあなたのための変更の通知を発生させます。

Myclass = null; 

注:これは純粋な管理対象クラスに適用されます。クラスがアンマネージリソースを使用する場合は、IDisposableを実装する必要があります。

関連する問題