c#中垃圾回收机制

本文探讨了 C# 中析构函数的作用及其与资源管理的关系,并详细介绍了如何通过实现 IDisposable 接口及使用 Dispose 方法来确保及时清理非托管资源。文章还解释了为什么析构函数不是清理资源的最佳选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

析构函数执行在类的实例被销毁之前清理或释放托管资源,与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;
  }
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值