IDisposable


.NET中实现正确的资源释放模式

在工作中,经常会碰到诸如内存泄漏的问题,有时候会听到同事讨论在.NET中如何释放内存,比如说“不要使用using,要手动调用dispose”,“要手动的编写析构函数”等等,其中很多观点我觉得不对,今天稍微整理一下,本文译自Effective C#。 一 问题的由来     在.NET这种托管环境中,垃圾回收为我们管理内存,和其他一些语言如C++不同,我们不必操心内存泄漏,非法指针,没有实例化的指针,以及其他一些内存管理的问题。但是垃圾回收也不是万能的。在有些时候,我们也必须自己手动的对使用过的资源进行清理。对一些非托管的资源,如文件句柄、数据库连接、GDI+对象,COM对象以及其他一些系统级别的对象进行访问后,我们需要进行手动的清理。另外,有时候可能会使得某些对象在内存中的存留时间比我们预期的要长,比如在我们创建事件或者代理的时候。一些查询表达式,因为有延迟执行的特性,会使得一些对象的生存 …

IDisposable

  • 1