c#中垃圾回收机制

来源:互联网 发布:淘宝哪家韩妆店最优惠 编辑:程序博客网 时间:2024/05/17 06:02

析构函数执行在类的实例被销毁之前清理或释放托管资源,与c++的析构函数不同,c#的析构函数不在实例失效时立即执行。

事实上我们不知道,他到底什么时候调用,而且也不能认为显示的调用析构函数。如果我们的系统需要他,则我们必须也要

为系统提供,系统会在对象从托管的堆中移走之前的某点调用它。

1.如果我们的代码中包含了需要及时清理的非托管资源,不要把它仅仅交给析构函数去处理,因为这样不能够即时清理它,我

们应该在类中实现名为IDispose的接口,接口将资源的清理代码封装在一个void 型的无参数方法Dispose中。

2.因为Dispose做清理而不是析构函数,所以应当调用GC.SuppressFinalize(),调用方法告诉CLR不要调用该方法的析构函数,

应为资源已经被清理了。

Class MyClass:IDispose{  bool disposed=false;  public void Dispose()  {     Dispose(true);     GC.SuppressFinallize();  }  ~MyClass(){Dispose(false)};  protected virtual void Dispose(bool disposing)  {   if(disposed==false)   {     if(disposing)     {      //清理托管资源     }     //清理非托管资源   }   disposed=true;  }}






0 0
原创粉丝点击