Работа GC в .Net заключается в остановке всех потоков (по крайней мере, для части полной коллекции, что и делает GC.Collect()
). Таким образом, вы можете сказать, что это очень синхронно, это не блокирует только один поток, но все они. И вызов GC.Collect()
выполнит сбор и возврат только после его завершения, поэтому GC.Collect()
- это способ запустить его синхронно.
Есть одна часть, связанная с GC, которая запускается в фоновом потоке - финализаторы. Если вы хотите убедиться, что все финализаторы завершены до того, как вы запустите свой тест, и что все завершенные объекты действительно собраны, используйте:
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
При этом нет никакого способа убедиться, что сборщик мусора не будет работать. И я не понимаю, почему я хочу это сделать. Если, например, ваш код создает много временных объектов, GC должен быть частью вашего теста, к лучшему или худшему, вы не должны пытаться исключить его.