Могу ли я запретить сборщику мусора останавливать некоторые из моих потоков?

Можно ли в приложении Compact Framework запретить сборщику мусора безоговорочно останавливать хотя бы один из потоков или блокировать сборку мусора хотя бы в некоторых частях кода?

Я думаю, что это связано с установкой приоритетов в реальном времени, но я нашел много советов против этого.


person castle1971    schedule 11.11.2008    source источник


Ответы (2)


GC должен заморозить все потоки, чтобы проверить все объекты. Как он может выполнять свою работу, если какой-то поток работает и модифицирует/создает объект?

Лучше не делай этого.

Что вы можете сделать, так это вызвать GC.Collect() и GC.WaitForPendingFinalizers() до того, как вы войдете в состояние, в котором вы не хотите, чтобы вас прерывали. Это даст вам немного времени.

person Sunny Milenov    schedule 11.11.2008

Неуправляемому коду не разрешен доступ к незакрепленным управляемым объектам, но он будет работать без блокировки во время сборки мусора. Если у вас есть определенные подпрограммы, которые должны продолжать выполняться во время сборки мусора, и им не требуется доступ к незакрепленным управляемым объектам, вы можете написать эти подпрограммы в неуправляемом коде, и GC не повлияет на них.

person supercat    schedule 28.03.2011