我对 .Net 中的 Dispose 和 Finalize 方法有如下想法。如果我错了,请纠正我。
Dispose :实现 IDisposable 接口(interface)并在 Dispose 方法中删除未使用/非托管代码。开发者如果想要立即移除需要手动调用,否则 GC 会在调用时释放资源。
Finalize :当 GC 调用时,它将释放未使用的托管代码,如果实现了 IDisposable,那么它将调用 Dispose 方法来释放非托管资源(通常)。
问题是:当我们使用 Dispose 方法释放资源时,内存会立即被释放并压缩(就像 GC 一样)?
最佳答案
您的问题的答案是否定的:释放分配给对象的内存与调用 Dispose
无关。方法。当垃圾收集器到达它时,它会在适当的时候发生。
一般来说,Dispose
旨在加速外部资源的释放,例如文件句柄、信号量、数据库句柄和其他经常由操作系统分配的项目。如果您的对象持有其他 IDisposable
对象,它也应该在调用 dispose 时处理它们。
然而,Finalizer 不同:它作为垃圾回收的一部分被调用,旨在释放在 dispose 期间尚未释放的外部资源(可能是因为用户忘记调用 Dispose
)。终结者不得调用 Dispose
您的对象可能拥有的其他对象,因为它们已经在被垃圾收集的过程中。
关于.net - 调用 Dispose 方法会清除和压缩 .Net 中的内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9204677/