1

我现在正在阅读有关 CLR ( 4.0 ) 上的 Dispose 和 Finalize 方法我不明白的东西......

如果我将 Finalize ( ~className1 ) 的实现添加到我的代码 => 则 Finalize List 具有指向托管堆中的对象实例的指针。

现在,假设我没有实现 Finalize ( ~className2 ),而我只是在我的代码上实现了 IDisposable 接口 - 对象是否会有来自 Finalize List 的指针?

4

2 回答 2

2

不,如果一个对象没有终结器,它就不会在终结队列中。

参考:MSDN

垃圾收集器跟踪具有 Finalize 方法的对象...每次应用程序创建具有 Finalize 方法的对象时,垃圾收集器都会在指向该对象的终结队列中放置一个条目。

于 2012-02-06T23:40:11.593 回答
0

基本上,对象存在的时间越长,垃圾收集器检查它是否仍然在代码中被引用的次数就越少。这意味着未使用的对象通常仍然在内存中,尽管它们已经很长时间没有被引用了。此外,如果您想明确告诉对象清理其资源,请使用 Dispose 方法。我建议在其实现中调用 GC.SuppressFinalize(this),并在终结器中调用 Dispose 方法。这样,如果用户忘记调用 Dispose,这不应该但可能发生,对象的资源最终将被释放。

于 2012-02-07T00:11:44.013 回答