Сборка мусора. Странное поведение. Утечка.
От: igor-booch Россия  
Дата: 13.06.20 14:35
Оценка:
В приложении есть класс с финилайзером (КФ).
КФ ссылается на экземпляры класса К1.
Экземпляр класса К2 ссылается на экземпляр класса К1.
Финалайзер КФ убирает ссылку К2 на К1.

При старте приложении создаётся большое количество объетов К2. Они нужны на всём протяжении работы приложения.
Далее происходят циклы:
1) Создаётся большое количество объектов КФ и К1.
2) Ссылки на КФ убираются

После каждого цикла объекты КФ из памяти не выгружаются, их финалайзеры не вызываются.
НО! Если перед началом циклов вызвать

GC.Collect();


то УТЕЧКИ НЕ ПРОИСХОДИТ.

Если не вызвать этот код, то JetBrains dotMemory Profiler показывает, что все объекты КФ доступны только из f-reacheble queue,
то есть ссылок на них нет, остальсь только вызвать у них финалайзер,
но GC почему-то этого делать не хочет.
Скриншоты с сессиями профилирования здесь.
Отвечайте на это сообщение, только если у Вас хорошее настроение и в Вашем ответе планируются только конструктивные вопросы и замечания
http://rsdn.ru/Info/rules.xml
Отредактировано 13.06.2020 16:39 igor-booch . Предыдущая версия . Еще …
Отредактировано 13.06.2020 16:16 igor-booch . Предыдущая версия .
Отредактировано 13.06.2020 14:53 igor-booch . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.