如何清理财产的记忆?

时间:2011-11-10 16:40:03

标签: c# mvvm

对于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;

2 个答案:

答案 0 :(得分:1)

您无法确定何时释放对象的内存(由垃圾收集器决定),但当然只有在没有对它的引用时才会释放它。您应该使用Property set accessor将其设置为null。它会为您提出更改通知。

Myclass = null;

注意:这适用于纯托管类。如果您的类使用非托管资源,则需要实现IDisposable。

答案 1 :(得分:0)

你的第二个选择应该可以正常工作。

Myclass = null;

第一个选项是不必要的非DRY。第三个选项不会引发PorpertyChanged