我知道它被用来释放非托管资源,但是我对Dispose
什么时候实际调用感到困惑。 我知道它在using
块的末尾被调用,但当对象被垃圾回收时它也会被调用吗?
我知道它被用来释放非托管资源,但是我对Dispose
什么时候实际调用感到困惑。 我知道它在using
块的末尾被调用,但当对象被垃圾回收时它也会被调用吗?
如果您正确实现IDisposable接口,您还应该包括一个终结器(finalizer),以便在对象上调用Dispose()方法。
如果这样做,Dispose()方法将由垃圾回收器(GC)调用。但是,总是尝试手动释放这些对象非常重要。
依靠终结器调用Dispose()方法的最大问题是它会在另一个您无法控制的线程中发生。这在某些情况下可能会带来不好的结果,包括在GC线程中发生异常并且具有已释放字段(field)检查。这也是为什么在Dispose()方法中包含GC.SuppressFinalize(this)非常重要的原因 - 一旦对象被释放,就不想再次释放它。
Dispose方法在以下几个地方被调用:
建议您在使用完资源后自行调用它,以更好地管理资源。
编辑:我弄错了。垃圾回收期间不会调用Dispose。请参见此文章。
Dispose()
。using
块的结尾自动调用它。