C#开发中的垃圾回收机制简析

2019-12-30 10:57:44于海丽
  •  // check to see if it has been disposed.     public void DoSomething()   
  •  {    if (this.disposed)   
  •  {    throw new ObjectDisposedException();   
  •  }     }   
  • // 不要设置方法为virtual.     // 继承类不允许重写这个方法   
  •  public void Close()    {   
  • // 无参数调用Dispose参数.    Dispose();   
  •  }     public static void Main()   
  •  {    // Insert code here to create   
  •  // and use a BaseResource object.     }   
  •  }  ?

     
    GC.Collect() 方法
    作用:强制进行垃圾回收。

    GC的方法:

    C#开发中的垃圾回收机制简析

    GC注意事项:

    1、只管理内存,非托管资源,如文件句柄,GDI资源,数据库连接等还需要用户去管理

    2、循环引用,网状结构等的实现会变得简单。GC的标志也压缩算法能有效的检测这些关系,并将不再被引用的网状结构整体删除。

    3、GC通过从程序的根对象开始遍历来检测一个对象是否可被其他对象访问,而不是用类似于COM中的引用计数方法。

    4、GC在一个独立的线程中运行来删除不再被引用的内存

    5、GC每次运行时会压缩托管堆

    6、你必须对非托管资源的释放负责。可以通过在类型中定义Finalizer来保证资源得到释放。

    7、对象的Finalizer被执行的时间是在对象不再被引用后的某个不确定的时间。注意并非和C++中一样在对象超出声明周期时立即执行析构函数