0

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

Dispose() -
通过实现 IDisposable 接口,用户可以清理非托管资源,用户将确切知道何时释放资源。

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

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

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

4

1 回答 1

1

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

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

于 2014-09-17T15:18:15.360 回答