垃圾收集器调用Dispose()吗?

noc*_*ura 60 .net c# memory garbage-collection 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

//输出只是"构造函数",我没有像我期望的那样得到"Dispose".这是怎么回事?

编辑:是的,我知道我应该调用Dispose() - 我在使用一次性物体时遵循标准模式.我的问题出现了,因为我试图追踪某些elses代码的漏洞,这是托管C++(另一层复杂性,这将是另一个线程的好主题).

Elo*_*off 55

GC不会调用Dispose,它会调用您的终结器(您应该拨打电话Dispose(false)).

请查看侧面的相关帖子或查看Dispose模式的C#最佳实践(文档IDisposable解释得非常好IIRC.)

  • 名称是"finializer",C#使用与C++析构函数类似的语法也许是不幸的. (4认同)
  • 需要注意的是,默认的*Finalizer*什么都不做.另见:http://stackoverflow.com/questions/898828/c-finalize-dispose-pattern/898867#898867 (4认同)