在收集第2代之前,是否实现了实现IDisposable和/或使用Finalizer的对象?

时间:2009-09-03 10:42:00

标签: c# idisposable

我很确定我已经阅读过(在Richter的C#书中)实现IDisposable的对象和/或有一个Finalizer的对象直到第2代。但是,我找不到引用,我的测试应用程序没有似乎支持我的信念。

其他人可以确认/否认吗?

3 个答案:

答案 0 :(得分:4)

他们肯定能够幸存到第一代,因为他们被排在队列中,以便终结者能够接近他们。然而,如果终结者在第1代收集之前到达他们,他们将无法生存到第2代。

我还没有比较那本书,但你确定你不会把它与大对象堆上的项混淆吗?大对象堆仅在Gen 2集合上收集。

答案 1 :(得分:1)

正如Anthony所说,finalization延迟了垃圾收集(即,在等待终结器运行时,通常会提升对象)。

单独实施IDisposable对垃圾收集没有影响 - GC不会“了解”IDisposable

答案 2 :(得分:0)

我想添加的内容:正确实现的IDisposable模式应该调用

GC.SuppressFinalize(this);

这样,垃圾收集器就不必等到对象完成了。请参阅here