В моем приложении UWP мне нужно выполнить критический раздел в течение нескольких секунд, когда я должен быть уверен, что сборщик мусора не вызывается.
Итак, я вызываю
const long TOTAL_GC_ALLOWED = 1024L * 1024 * 240; // 240 MB, it seems max allowed is 244 for Workstations 64 bits
try
{
bool res = GC.TryStartNoGCRegion(TOTAL_GC_ALLOWED);
if (!res)
s_log.ErrorFormat("Cannot allocate noGC Region!");
}
catch (Exception)
{
s_log.WarnFormat("Cannot start NoGCRegion");
}
К сожалению, даже если метод GC.TryStartNoGCRegion()
возвращает true
, я все равно вижу то же количество GarbageCollection Gen 2, что и в случае, когда я не вызываю этот метод.
Обратите также внимание, что я пытаюсь использовать машину с 16 ГБ ОЗУ, из которых только 9 ГБ используются всей ОС, когда я проводил тесты.
Что я делаю не так?
Как мне добиться подавить G C (на ограниченное количество времени)?