垃圾收集器是不是调用 Dispose()? [复制]
Posted
技术标签:
【中文标题】垃圾收集器是不是调用 Dispose()? [复制]【英文标题】:Does garbage collector call Dispose()? [duplicate]垃圾收集器是否调用 Dispose()? [复制] 【发布时间】:2010-12-14 02:13:42 【问题描述】:我认为如果您的程序没有调用 Dispose,GC 最终会调用 Dispose,但您应该在程序中调用 Dispose() 只是为了使清理具有确定性。
但是,从我的小测试程序中,我根本没有看到 Dispose 被调用....
public class Test : IDisposable
static void Main(string[] args)
Test s = new Test();
s = null;
GC.Collect();
Console.ReadLine();
public Test()
Console.WriteLine("Constructor");
public void Dispose()
Console.WriteLine("Dispose");
// 输出只是“构造函数”,我没有得到预期的“处理”。怎么了?
编辑: 是的,我知道我应该调用 Dispose() - 我在使用一次性物品时确实遵循标准模式。出现我的问题是因为我正在尝试追踪其他人代码中的泄漏,该代码是托管 C++(另一层复杂性,这将是另一个线程的好主题)。
【问题讨论】:
这个问题与http://***.com/questions/45036/will-the-garbage-collector-call-idisposable-dispose-for-me重复。 【参考方案1】:GC 不调用Dispose
,它调用你的终结器(你应该调用Dispose(false)
)。
请查看侧面的相关帖子或查找 Dispose 模式的 C# 最佳实践(docs on IDisposable
很好地解释了 IIRC。)
【讨论】:
好吧,我的语言在这里混淆了。 需要注意的是默认的Finalizer什么都不做。另见:***.com/questions/898828/c-finalize-dispose-pattern/…【参考方案2】:简短的回答是“不”。更详细的答案可以在我对"Is it bad practice to depend on the .NET Garbage Collector"和"What happens if I don't call Dispose()"的回复中找到
【讨论】:
以上是关于垃圾收集器是不是调用 Dispose()? [复制]的主要内容,如果未能解决你的问题,请参考以下文章