GC.Collect
似乎是在后台线程中启动垃圾回收,然后立即返回。如何同步运行GC.Collect
--即等待垃圾回收完成?
这是在NUnit测试的上下文中。我尝试将gcConcurrent设置添加到我的测试程序集的app.config文件中,并尝试在nunit.exe.config文件中执行相同的操作。但两者都没有产生任何效果--调试时,我仍然可以看到“GC Finalizer Thread”上运行终结器,而不是调用GC.Collect
(NUnit的“TestRunnerThread”)的线程,并且这两个线程正在并发运行。
背景:我希望如果测试泄漏(未调用Dispose),它们将失败。因此,我已经向该类添加了一个终结器,该终结器设置静态wasLeaked
标志; 然后,我的测试TearDown调用GC.Collect()
,然后如果wasLeaked
为true,则抛出异常。但是,它并不是确定性地失败,因为当读取wasLeaked
时,终结器通常还没有被调用。(直到垃圾回收最终完成后,它才会在某个后续测试中失败。)