我现在正在阅读CLR(4.0)上的Dispose和Finalize方法我不明白。。。
如果我将Finalize(~className1)的实现添加到代码=>中,则Finalize List具有指向托管堆中的对象实例的指针。
现在,假设我没有实现Finalize(~className2),我只是在代码上实现了IDisposable接口——这个对象会有来自Finalize列表的指针吗?
否。如果一个对象没有终结器,那么它将不在终结队列中。
参考:MSDN
垃圾收集器跟踪具有Finalize方法的对象。。。每次应用程序创建一个具有Finalize方法的对象时,垃圾收集器都会在终结队列中放置一个指向该对象的条目。
基本上,对象存在的时间越长,垃圾收集器检查代码中是否仍引用它的次数就越少。这意味着未使用的对象通常仍然可以在内存中,尽管它们已经很长时间没有被引用了。此外,如果要明确告知对象清理其资源,请使用Dispose方法。我建议gesst在其实现中调用GC.SuppressFinalize(this),并在终结器中调用Dispose方法。这样,如果用户忘记调用Dispose(这不应该但可能发生),那么对象的资源最终会被释放。