为什么我们需要对某些对象使用Dispose()方法?垃圾收集器为什么不这样做?

Kar*_*rim 11 c# garbage-collection dispose

问题是:为什么我们需要调用Dispose()一些对象?为什么垃圾收集器在超出范围时收集它?我试图理解为什么它被实现的原因.我的意思是,如果Dispose()在垃圾收集器收集范围对象时调用它会不会更容易.

Jon*_*eet 22

垃圾收集器是不确定的 - 它在不再引用后的某个时刻收集对象,但不能保证及时发生.与引用计数相比,这具有各种优点,包括允许循环依赖性和不在整个地方递增和递减计数器的性能优势.

但是,它确实意味着对于应该及时清理的资源(例如数据库连接,文件句柄等 - 几乎除了内存之外的任何其他东西),您仍然需要明确地处理资源.该using声明使这很容易.

  • @Karim:嗯,你当然应该处理那些位图.你必须看看GCs发生了什么,以便诊断它最终没有收集它们的原因 - 但是有一个原因是Image实现了IDisposable ...... (3认同)

Tho*_*ing 7

Dispose用于清理非托管资源(例如数据库连接的包装器,旧的COM库,......).

编辑: 一些MSDN链接以及更多详细信息:
http://msdn.microsoft.com/en-us/library/b1yfkh5e(VS.71).aspx
http://msdn.microsoft.com/en-us/library/0xy59wtx (VS.71)的.aspx

要指定当垃圾回收器回收对象时非托管资源会发生什么,您必须覆盖受保护的Finalize()方法:http://msdn.microsoft.com/en-us/library/system.object.finalize( VS. 71)的.aspx