У меня есть DataGridView, регулярно заполняемый через объекты, связанные с данными, и число строк может потенциально стать большим, скажем, многие тысячи в течение «цикла регистрации».
Когда начинается новый «цикл регистрации», сетка очищается, поскольку очищается базовый источник данных, и процесс начинается снова.
Это все нормально, но поскольку предыдущий запуск занимает некоторое время, все эти предыдущие строки стали объектами поколения 2, и только мусор собирается на полном GC.
Однако для их очистки требуется ДВА полных ГХ, поскольку первый отправляет их всех в очередь финализатора. Это означает, что они держатся вдвое дольше, заполняя память.
Используя рефлектор, я вижу, что DataGridViewRow не имеет метода финализатора, но он наследуется от объекта DataGridViewBand, который - и вызывает GC.SuppressFinalize (this) через его публичный метод Dispose ().
Итак, мой вопрос - почему мои DataGridViewRows не собираются на первом полном GC и не попадают в очередь финализаторов в ожидании другого?
(Мои предположения здесь заключаются в том, что любой объект без финализатора не должен помещаться в очередь финализатора, и любой объект, который имеет его, но вызывает GC.SuppressFinalize, также не будет помещаться в очередь. Я прав в этом предположении ?)
Спасибо.