GC.Collect
появляется, чтобы запустить сборку мусора в фоновом потоке, а затем немедленно вернуться. Как я могу запустить GC.Collect
синхронно, то есть дождаться завершения сборки мусора?
Это в контексте тестов NUnit. Я попытался добавить параметр gcConcurrent в файл app.config моей тестовой сборки, и я попытался сделать то же самое с nunit.exe.config. Ни один из них не имел никакого эффекта - когда я отлаживаю, я все еще вижу, как финализатор запускается в «потоке финализатора GC», а не в потоке с именем GC.Collect
(«TestRunnerThread» NUnit), и оба потока работают одновременно.
Справочная информация. Я хочу, чтобы мои тесты не выполнялись, если они пропускают (не вызывая Dispose) определенный класс. Итак, я добавил финализатор к этому классу, который устанавливает статический флаг wasLeaked
; тогда мой тест TearDown вызывает GC.Collect()
, а затем выдает, если wasLeaked
- true. Но это не является детерминированным сбоем, потому что когда он читает wasLeaked
, финализатор обычно даже еще не вызывается. (Вместо этого после некоторого более позднего теста он завершает сборку мусора.)