gpt4 book ai didi

c# - c#中的垃圾收集器什么时候退出

转载 作者:太空宇宙 更新时间:2023-11-03 19:52:05 25 4
gpt4 key购买 nike

垃圾收集器是在整个 Main 方法执行完毕后关闭,还是仍在后台运行以清理 Main 方法遗留在内存中的所有对象。

最佳答案

垃圾收集器将在程序退出时在后台运行以运行挂起的终结器,但如果终结器花费的时间太长,它将放弃并过早退出。

你可以用下面的程序来证明这一点:

using System;
using System.Diagnostics;
using System.Threading;

namespace Demo
{
class Test
{
~Test()
{
Thread.Sleep(250);
Trace.WriteLine("In Test finalizer");
}
}

class Program
{
static void Main()
{
var t = new Test[20];

for (int i = 0; i < 20; ++i)
t[i] = new Test();

//t = null;
//GC.Collect();
//GC.WaitForPendingFinalizers();
}
}
}

在调试器下运行该程序,您会看到在 GC 放弃之前,只有 20 个终结器中的一些实际运行。

但是,您可以通过调用

确保所有挂起的终结器在程序结束时完全运行
GC.Collect();
GC.WaitForPendingFinalizers()

如果您取消注释上面示例代码中 Main() 末尾的三个注释掉的行,然后再次在调试器下运行该程序,您将看到所有 20 次调用测试 将进行终结器。

关于c# - c#中的垃圾收集器什么时候退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37746475/

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