垃圾回收总结
几部分组成:
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,本身也没有用,且有很大性能消耗。