GC.Collect
似乎在後臺線程中啓動垃圾回收,然後立即返回。我如何同步運行GC.Collect
- 即等待垃圾收集完成?運行GC.Collect同步
這是在NUnit測試的上下文中。我嘗試將gcConcurrent設置添加到我的測試程序集的app.config文件中,並且我嘗試了與nunit.exe.config相同的設置。沒有任何影響 - 當我調試時,我仍然可以看到終結器在「GC終結器線程」上運行,而不是稱爲GC.Collect
(NUnit的「TestRunnerThread」)的線程,並且兩個線程都同時運行。
背景:我想我的測試失敗,如果他們泄漏(不要調用Dispose)一個特定的類。所以我添加了一個終結器給那個設置了靜態wasLeaked
標誌的類;那麼我的測試TearDown調用GC.Collect()
,然後拋出if wasLeaked
爲真。但它不是確定性地失敗,因爲當它讀取wasLeaked
時,終結器通常還沒有被調用。 (它失敗以後的某個測試取而代之的是,垃圾收集終於結束了。)
文檔說WaitForFullGCApproach和WaitForFullGCComplete應該總是一起使用。當我明確觸發GC時,如何等待GC方法?你有這樣的代碼示例嗎? – 2009-04-14 19:06:17
對不起,遲交的答案。這裏有一個很好的解釋和示例,它應該或多或少地適用於您的代碼: http://msdn.microsoft.com/en-us/library/cc713687.aspx 您可能想要選擇您的方法通知限制,以便你基本上會立即得到通知。 – Lucero 2009-04-14 22:22:36