gpt4 book ai didi

.net - 同步运行 GC.Collect

转载 作者:行者123 更新时间:2023-12-03 20:19:51 25 4
gpt4 key购买 nike

GC.Collect似乎在后台线程中启动垃圾收集,然后立即返回。我该如何运行 GC.Collect同步——即等待垃圾收集完成?

这是在 NUnit 测试的上下文中。我尝试添加 gcConcurrent设置为我的测试程序集的 app.config 文件,并且我对 nunit.exe.config 进行了相同的尝试。两者都没有任何影响——当我调试时,我仍然可以看到终结器在“GC 终结器线程”上运行,而不是在调用 GC.Collect 的线程上运行。 (NUnit 的“TestRunnerThread”),并且两个线程同时运行。

背景:我希望我的测试在泄漏(不要调用 Dispose)特定类时失败。所以我在那个类中添加了一个终结器,它设置了一个静态 wasLeaked旗帜;然后我的测试 TearDown 调用 GC.Collect()然后抛出 if wasLeaked是真的。但它并没有确定性地失败,因为当它读取 wasLeaked 时,终结器通常还没有被调用。 (在垃圾收集最终完成后,它会在稍后的测试中失败。)

最佳答案

终结器在专用的高优先级后台线程上运行。从你帖子的背景来看,我认为你可以简单地做

GC.Collect();
GC.WaitForPendingFinalizers();
Collect()将安排任何非根实例进行终结,然后线程将等待终结器线程完成。

关于.net - 同步运行 GC.Collect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/748777/

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