Могу ли я предотвратить сборщик мусора от остановки некоторых из моих потоков?
-
08-07-2019 - |
Вопрос
Возможно ли в приложении Compact Framework предотвратить сборщик мусора от безоговорочной остановки хотя бы одного из потоков или заблокировать сбор GC хотя бы в некоторых частях кода?
Я думаю, что это связано с установлением приоритетов в реальном времени, но я нашел много советов против этого.
Решение
GC должен заморозить все потоки, чтобы проверить все объекты. Как это может сделать свою работу, если какой-то поток работает и модифицирует / создает объект?
Лучше не делай этого.
Что вы можете сделать, это вызвать GC.Collect () и GC.WaitForPendingFinalizers (), прежде чем войти в состояние, в котором вы не хотите, чтобы вас прерывали. Это даст вам некоторое время.
Другие советы
Неуправляемому коду запрещен доступ к неподкрепленным управляемым объектам, но он будет работать без блокировки во время сбора мусора. Если у вас есть определенные подпрограммы, которые должны работать во время сбора мусора, и им не требуется доступ к неподкрепленным управляемым объектам, вы можете написать эти подпрограммы в неуправляемом коде, и сборщик мусора не повлияет на них.