Fen*_*end 19 c# garbage-collection dispose idisposable
如果.NET有垃圾收集,那你为什么要显式调用IDisposable呢?
Jon*_*eet 48
垃圾收集用于记忆.您需要处理非内存资源 - 文件句柄,套接字,GDI +句柄,数据库连接等.这通常是IDisposable类型的基础,尽管实际句柄在引用链中可能相当长.例如,你可能Dispose在XmlWriter其中配置一台StreamWriter有一个参考,它部署在FileStream 它有一个参考,它释放的文件句柄本身.
在其他评论上稍微扩展一下:
应该对所有引用了非托管资源的对象调用Dispose()方法.这样的示例包括文件流,数据库连接等.大多数情况下工作的基本规则是:"如果.NET对象实现了IDisposable,那么在完成对象时应该调用Dispose().
但是,还要记住一些其他事项:
除非绝对需要,否则不要在自己的对象中实现IDisposable.实施不当或不必要的实施实际上可以使事情变得更糟而不是更好.这里有一些很好的指导: