垃圾收集概念

时间:2013-09-30 13:52:29

标签: c# garbage-collection dispose finalize

Finalize() - 此功能仅在垃圾收集过程中清理非托管资源 - 用户不知道此方法是什么时候实际执行。
用户也不能直接调用此函数来清理内存。

Dispose() - 通过实施IDisposable接口,用户可以清理UnManaged Resources,用户可以确切地知道资源何时被释放。

我的理解是不能覆盖Finalize()来清理非托管资源。
这是一个系统进程,仅用于“GC”进程用于清理非托管资源。
如果用户需要自己清理资源,那么他/她应该实现IDisposable接口并显式调用Dispose()。没有其他可能性!
清理非托管资源的最佳做法是使用“使用”声明。

问题1: 我的理解是否正确?如果我错了,请在我的上述陈述中纠正我。

问题2: 另外,我想知道,我可以通过实现IDisposable接口和Dispose()调用来清理托管资源吗?

1 个答案:

答案 0 :(得分:1)

Finalize不会清理内存。它处理非托管资源。在.NET应用程序中,内存是受管资源,分配和释放内存由运行时处理。你不需要做任何特别的事情。当对象有资格收集时,垃圾收集器将回收内存。

这导致你的第二个问题的答案:不,你不能使用IDisposable清理内存,因为内存是通过垃圾收集自动回收的。使用IDisposable处理GC未处理的资源(如句柄)。