IDisposable接口如何工作?

Ton*_*ony 9 .net garbage-collection dispose idisposable

我知道它用于释放非托管资源,但是,我很困惑何时Dispose实际调用.我知道它在using块的末尾被调用,但是当对象被垃圾收集时它是否也会被调用?

Ree*_*sey 11

如果你正确实现了IDisposable,你还应该包含一个终结器,它将在你的对象上调用Dispose().

如果这样做,它将被GC调用.但是,尝试始终自行处理这些对象仍然是一个非常好的主意.

依赖终结器来调用Dispose的最大问题是它将发生在你无法控制的另一个线程中.在某些情况下,这可能会产生令人讨厌的后果,包括导致GC线程中发生的异常,这是不好的,以及您检查的处理字段.这也是为什么在Dispose()方法中包含GC.SuppressFinalize(this)很重要的原因 - 一旦对象被处理掉,你就不想重新处理它了.