首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >垃圾收集器是否调用Dispose()?

垃圾收集器是否调用Dispose()?
EN

Stack Overflow用户
提问于 2009-11-07 11:11:36
回答 2查看 42.3K关注 0票数 66

我认为如果您的程序没有调用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");
    }
}

// Output只是"Constructor",我没有像我期望的那样得到"Dispose“。出什么事啦?

Dispose EDIT:是的,我知道我应该调用Dispose() -我在使用一次性对象时确实遵循标准模式。我的问题之所以出现,是因为我试图追踪某人自己的代码中的漏洞,这是托管C++ (另一个复杂性层,将是另一个线程的好主题)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-07 11:14:45

GC不会调用Dispose,它会调用终结器(您应该让它调用Dispose(false))。

请查看附带的相关帖子或查找Dispose模式的C#最佳实践( docs on IDisposable对此进行了很好的解释。)

票数 61
EN

Stack Overflow用户

发布于 2012-06-20 02:55:36

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1691846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档