Моя программа выделяет очень большое количество экземпляров, которые составляют долгоживущую DAWG.Во время создания этой DAWG бывают случаи, когда прогресс замедляется в 100 раз, и это прекрасно согласуется с .NET, выполняя коллекции GC второго поколения.В течение этих периодов «% времени в ГХ» составляет 99,5%, а «общее количество коллекций второго поколения» увеличивается каждые несколько секунд.После нескольких последовательных сборов поколения 2 они прекращают запуск без видимой причины, и программа снова ускоряется.Через несколько минут цикл возобновляется.
Количество созданных мной экземпляров составляет порядка 25 миллионов, и они занимают несколько ГБ ОЗУ, поэтому неудивительно, что коллекции 2-го поколения принимают этодолго.Что удивительно, так это то, что коллекции второго поколения входят в состав «поездов» и постоянно запускаются.
Могу ли я как-то предотвратить это, не переосмысливая свой подход?Возможно, есть какой-то способ попросить .NET приостановить сборы второго поколения до дальнейшего уведомления?Программа работает очень эффективно, кроме этих случаев, так что .NET явно вполне справляется с этой задачей, кроме этого неудачного поведения в угловых случаях.
(Я попытался установить GCSettings.LatencyMode в GCLatencyMode.Batch, но проблемаосталось. Объем свободной физической памяти на момент начала работы ГХ составляет около 1 ГБ. Это на 64-битной машине.)