【问题标题】: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++(另一层复杂性,这将是另一个线程的好主题)。

【问题讨论】:

标签: c# .net memory dispose garbage-collection


【解决方案1】:

GC 不调用Dispose,它调用你的终结器(你应该调用Dispose(false))。

请查看侧面的相关帖子或查找 Dispose 模式的 C# 最佳实践(docs on IDisposable 很好地解释了 IIRC。)

【讨论】:

【解决方案2】:

简短的回答是“不”。更详细的答案可以在我对"Is it bad practice to depend on the .NET Garbage Collector""What happens if I don't call Dispose()"的回复中找到

【讨论】:

    猜你喜欢
    • 2016-02-29
    • 1970-01-01
    • 2010-12-21
    • 2021-05-25
    • 1970-01-01
    • 2012-12-20
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多