Я пишу программу, которая работает с кучей (5000+) XML файлов, десериализует их и записывает новые XML файлы (по 1 для каждого) из их данных посредством асинхронных c обращений к XmlWriter экземпляр.
Я заметил, что моя программа собирала мусор дважды (или более) в секунду.
В течение 10 секунд:
В течение 4 секунд:
Поэтому я хотел посмотреть, что у меня в памяти, и использовать gcdump , который при вызове выполняет Сборка мусора 2-го поколения.
После вышеупомянутого вызова G C я больше не получаю никаких автоматических c сборщиков мусора до конца программы, как я надеялся, что это будет первоначально.
Вы можете видеть, как коллекции исчезают посередине, вот когда я позвонил gcdump:
Это нормальное поведение для G C?
Я предполагаю, что в начале программы я создаю объект в куче, которая занимает большую часть выделенное пространство, поэтому G C нужно вызывать очень часто; но почему этот объект не удаляется автоматически? Почему я должен вручную вызвать G C (через gcdump) для его утилизации?
Спасибо за вашу помощь.