垃圾回收总结

几部分组成:

1,Finalize[~]方法

2,Dispose()方法

3,Dispose(bool disposing)方法

 

Finalize方法是每个类都默认有的,且每个类的所有成员的都没有引用的时候就调用,调用完就释放这个对象他的内存。

 

Dispose方法是手动的终结对象,所以这个方法里包含Dispose其引用成员的方法。

 

public void Dispose()

{

  Dispose(true);

  GC.SuppressFinalize(this);

}

GC.SuppressFinalize(this)是通知GC对这个对象不要Finalize了

 

 

Dispose(bool disposing)方法是前面两者的内容的合集,Finalize方法调用false,Dispose调用true

 

protected virtual void Dispose(bool disposing)

{

  if(disposing)

  {

    //释放托管资源

  }

  //释放非托管资源  

}

 

为什么这么分呢,因为两种调用的区别,就是一种是所有托管成员都没有引用时自动调用的,一种不是,所以不是的就需要自己释放,其他一样。

为什么共用的是释放非托管资源呢?因为自动调用Finalize的时候托管的都不存在了,只需要释放非托管。

如果没有非托管资源释放的任务,就不要重写Finalize,本身也没有用,且有很大性能消耗。

posted on 2011-11-14 17:47  理想Ideal  阅读(164)  评论(0编辑  收藏  举报

导航