我知道它用于释放非托管资源,但是,我很困惑何时Dispose
实际调用.我知道它在using
块的末尾被调用,但是当对象被垃圾收集时它是否也会被调用?
如果你正确实现了IDisposable,你还应该包含一个终结器,它将在你的对象上调用Dispose().
如果这样做,它将被GC调用.但是,尝试始终自行处理这些对象仍然是一个非常好的主意.
依赖终结器来调用Dispose的最大问题是它将发生在你无法控制的另一个线程中.在某些情况下,这可能会产生令人讨厌的后果,包括导致GC线程中发生的异常,这是不好的,以及您检查的处理字段.这也是为什么在Dispose()方法中包含GC.SuppressFinalize(this)很重要的原因 - 一旦对象被处理掉,你就不想重新处理它了.