gpt4 book ai didi

c# - 垃圾收集器是否调用 Dispose()?

转载 作者:IT王子 更新时间:2023-10-28 23:28:25 26 4
gpt4 key购买 nike

我认为如果您的程序没有调用 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++(另一层复杂性,这将是另一个线程的好主题)。

最佳答案

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

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

关于c# - 垃圾收集器是否调用 Dispose()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1691846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com