using System;

//处理非托管资源
//例如:文件句柄、网络连接、数据库连接 //实现IDisposable不意味着也应该实现一个终结器,终结器会带来额外开销
//发布本机资源,要释放本机资源就需要终结器 //如果实现了终结器,也应该实现IDisposabel接口
//这样本机资源可以早些释放 namespace ConsoleApp
{
//1.析构函数或终结器
class MyClass
{
//C#无法确定对象的析构函数何时执行
//会有延迟
//频繁使用析构函数,而且使用它们执行长时间的清理任务,对性能影响就会非常显著
~MyClass()
{
//其实是Finalize()方法
}
} //2.实现System.IDisposable
class MyClass1 : IDisposable
{
public void Dispose()
{
}
} //3.双重实现
class MyClass2 : IDisposable
{
//表示对象是否已被清理
private bool _isDisposed = false;
public void Dispose()
{
//...
Dispose(true);
GC.SuppressFinalize(this);//告诉回收器不需要调用析构函数了 } protected virtual void Dispose(bool disposing)
{
if (!_isDisposed)
{
if (disposing)
{//...
//清理托管资源
}
//...
//清理非托管
}
_isDisposed = true;
} ~MyClass2()//只清理非托管
{
Dispose(false);
}
} class Program
{
static void Main(string[] args)
{
MyClass1 theInstance = null;
//使用try/finally确保发生异常也能释放资源
try
{
theInstance = new MyClass1();
}
finally
{
theInstance?.Dispose();
} //如果这些大括号过多很容易混淆
//也可以使用using来完成此工作,在变量超出作用域会自动调用Dispose()
using (var ins = new MyClass1())
{
//...
} }
}
}

最新文章

  1. Android之debug---menu的getActionView()return null
  2. C# 使用IEnumerable,yield 返回结果,同时使用foreach时,在循环内修改变量的值无效(二)
  3. 【C语言入门教程】5.6 函数库和文件
  4. 分佈式事務故障處理暨ORA-24756: transaction does not exist處理
  5. Beta阶段站立会议-01
  6. POJ1364 King-差分
  7. JVM的启动流程
  8. mke2fs/mks.etc3/fstab/mount指令
  9. MyEclipse的快捷使用(含关联源码和Doc的方式)
  10. C#关于静态与非静态的区别
  11. Invitation Cards(邻接表+逆向建图+SPFA)
  12. Request.ServerVariables详细说明
  13. Java NIO之套接字通道
  14. 和初学者交流学习java语言一些体会。
  15. Kotlin基础(四)Lambda编程
  16. 背水一战 Windows 10 (89) - 文件系统: 读写文本数据, 读写二进制数据, 读写流数据
  17. 计蒜客 31436 - 提高水平 - [状压DP]
  18. 解决input 有readonly属性 各个浏览器的光标兼容性问题
  19. 脱壳_00_压缩壳_ASPACK
  20. Codeforces Round #369 (Div. 2) B. Chris and Magic Square 水题

热门文章

  1. python之面相对象进阶
  2. 通过supper()有参构造器,完成子类对象调用父类属性的方法,并完成赋值
  3. jconsole连接本地进程报安全连接失败
  4. WPF动态模板选择的两种实现
  5. python之zip打包
  6. L2-4 部落 (25 分)
  7. 全文搜索引擎 ElasticSearch 还是 Solr?
  8. 基于 HTML5 WebGL 的 3D 棉花加工监控系统
  9. JS 灵活使用 console 调试
  10. spark-MLlib之线性回归