【发布时间】:2009-04-14 18:23:53
【问题描述】:
GC.Collect 似乎在后台线程中启动垃圾收集,然后立即返回。如何同步运行GC.Collect - 即等待垃圾收集完成?
这是在 NUnit 测试的上下文中。我尝试将gcConcurrent 设置添加到我的测试程序集的app.config 文件中,并尝试使用nunit.exe.config 进行相同的操作。两者都没有任何效果——当我调试时,我仍然可以看到终结器正在“GC终结器线程”上运行,而不是调用GC.Collect(NUnit 的“TestRunnerThread”)的线程,并且两个线程同时运行。
背景:我希望我的测试在泄漏(不要调用 Dispose on)特定类时失败。所以我为那个设置了一个静态wasLeaked标志的类添加了一个终结器;然后我的测试 TearDown 调用 GC.Collect() 然后如果 wasLeaked 为真则抛出。但它并没有确定性地失败,因为当它读取wasLeaked 时,通常甚至还没有调用终结器。 (在垃圾收集最终完成后,它会失败一些稍后的测试。)
【问题讨论】:
标签: .net nunit garbage-collection