每个对象只有在该对象不存在任何引用才会被垃圾回收起回收。
可以调用静态方法System.GC.Collect()垃圾回收器,但是不建议这么做;
用using语句可以有效的自动释放掉资源。
实在没有办法才用从析构函数中调用Dispose方法。
class Example:IDisposable
~example(){
Dispose();
}
public virtual void Dispose();
{
if(!this.disposed){
try{
//在此释放稀缺资源
}
finally{
this.disposed=true;
GC.SuppressFinalize(this);
}
}
}
public void SomeBehavior()//示例方法
{
checkifdisposed();
}
...
private void checkifdisposed(){
if(this.disposed)
{
throw new ObjectDisposedException("Example");
}
}
private Resource scarce;
private bool disposed=false;
}
---------------------------------------------------------------------------------------------------------------------
附加C#垃圾回收器的分级回收机制:
C#中的回收器是分代的垃圾回收器(Gererational Garbage Collector) 它将分配的对象分为3个类别或代。(可用GC.GetGeneration方法返回任意作为参数的对象当前所处的代)最近被分配内存的对象被放置于第0代,因为第0代很小,小到足以放进处理器的二级(L2)缓存,所以它能够提供对对象的快速存取。经过一轮垃圾回收后,仍然保留在第
0代中的对象被移进第1代中,再经过一轮垃圾内存回收后,仍然保留在第1代中的对象则被移进第2代中,第2代中包含了