В настоящее время я исследую утечку памяти, которую я не могу объяснить, и сейчас я ищу полезные ссылки или идеи.
Вот скриншот родной памяти приложения (сделанный с помощью профилировщика памяти .NET):
Приложение занимает около 2,2 ГБ (что нормально). Дамп был взят, когда у приложения было около 3,5 ГБ. И эти пробелы в поколении № 0 - это то, что я сейчас не могу объяснить. Мне кажется, сборщик мусора не сокращает пробелы в поколении № 0.
Чтобы задать один четкий вопрос:
- Как возникают такие разрывы? Мне кажется, что сборщик мусора собирал мертвые объекты, но не уплотнял кучу. Я знаю, что не могу вызвать или заставить GC сжать кучу.
Я искал на этом сайте похожие вопросы, но большинство из них касаются LOH (что в моем случае кажется нормальным). Единственный вопрос, который имеет какие-то похожие большие пробелы, заключается в следующем: Что такое отверстия GC , но я не вижу, как 2 КБ закрепленных экземпляров поколения # 0 приводят к отверстиям размером 1 ГБ. Другой вопрос касается порога срабатывания GC Пороги GC . Но я не могу поверить, что не было ни одной фазы уплотнения.