Calling Dispose method will clear and compact the memory in .Net?
我对.NET中的Dispose和Finalize方法有如下想法。如果我错了,请纠正我。
Dispose:实现IDisposable Inferface并移除Dispose方法中未使用/未托管的代码。如果开发人员希望立即删除,则需要手动调用它,否则在调用资源时,GC将处理该资源。
Finalize:当调用GC时,它将释放未使用的托管代码,如果实现IDisposable,则它将调用Dispose方法释放非托管资源(通常)。
问题是:当我们使用Dispose方法处理资源时,内存将立即释放并压缩(就像GC所做的那样)?
您的问题的答案是否定的:释放为对象分配的内存与调用
一般来说,
但是,终结器是不同的:它被称为垃圾收集的一部分,用于释放在释放期间未释放的外部资源(可能是因为用户忘记调用
否。直接或通过using语句调用Dispose方法不会导致释放内存。
实现IDisposable只会给你的类一个清理它所拥有的任何非托管资源的机会。
Finalize : When GC invoked it will free the unused managed code and if IDisposable is implemented then it will call Dispose method to free up the unmanaged resources(normally).
你这里有些不正确。当您说"它将调用Dispose"时,如果您指的是GC本身,那么,不,它不会"自动"为您调用Dispose。作为程序员,在Dispose和Finalizer方法中进行清理是您的工作。
这里写的这个msdn演示了典型的处理模式。
The question is: When we dispose the resources using Dispose method, memory will be freed immediately and compacted(as GC doing)?
不,调用Dispose不会释放堆内存。在GC运行并执行清理之前,不会释放堆内存。