调用Dispose方法会清除并压缩.Net中的内存吗?

Sye*_*yed 3 .net garbage-collection idisposable finalizer

我对.Net中的Dispose和Finalize方法有如下想法。如果我错了,请纠正我。

Dispose:实现IDisposable接口,并在Dispose方法中删除未使用/不受管理的代码。如果开发人员要立即删除,则开发人员需要手动调用它,否则GC将在调用资源时对其进行处置。

Finalize:GC调用时将释放未使用的托管代码,如果实现了IDisposable,则将调用Dispose方法释放非托管资源(通常)。

问题是:当我们使用Dispose方法处置资源时,内存将立即释放并压缩(就像GC一样)吗?

das*_*ght 5

您的问题的答案是否定的:释放为对象分配的内存与调用Dispose方法无关。当垃圾收集器到达时,它会在适当的时候发生。

一般来说,Dispose它旨在加快外部资源的释放,例如文件句柄,信号量,db句柄以及操作系统经常分配的其他项目。如果您的对象保留在其他IDisposable对象上,则它也应该在调用Dispose的过程中对其进行处理。

但是,终结器有所不同:它被称为垃圾回收的一部分,并且用于释放在处置期间尚未释放的外部资源(大概是因为用户忘记了调用Dispose)。终结器不得调用Dispose您的对象可能包含的其他对象,因为它们已经在进行垃圾回收。