Вы должны позвонить GC.WaitForPendingFinalizers
после GC.Collect
, чтобы разрешить сборщику мусора очистить свободную очередь. Поскольку GC работает в другом потоке, возможно, что ваше приложение перешло в то время, когда GC пытается завершить любые объекты, требующие завершения. Вызывая GC.WaitForPendingFinalizers
, вы заставляете текущий поток ждать, пока GC завершит очистку свободной очереди (очереди элементов, требующих завершения), прежде чем возобновить выполнение.
При этом, однако, я согласен с комментарием Джоэла Кохорна - GC работает лучше всего, когда вы оставляете его в покое.