Я задал вопрос о моей проблеме с управлением памятью в WPF, но это другой вопрос о той же проблеме.
Я использую DotTrace, пытаясь выяснить, что происходит. Когда я запускаю свое приложение, я вижу в диспетчере задач, что оно занимает 200 МБ. DotTrace сообщает в общей сложности 33 МБ. Если я просто сверну окно и восстановлю его, объем памяти в соответствии с ТМ составит около 25 МБ.
У меня есть ListBox, который показывает имена людей и картинки. Он показывает до 3000 человек (я буду работать над пейджингом, но здесь дело не в этом). Прокручивая вниз, я вижу в TM, что память быстро увеличивается. Если я продолжу прокручивать память вверх и вниз, то быстро получу 1 ГБ. Во время прокрутки нет никаких изменений в базовых данных и нет моих собственных событий. Если я сверну окно и восстановлю его, объем памяти уменьшится с 1 ГБ до 25 МБ.
Перед тем, как свернуть и увидеть, как уменьшается память в TM, я сделал снимок с помощью DotTrace, и он показывает тот же объем памяти, что и до прокрутки - около 30 МБ или около того.
Может кто-нибудь объяснить мне, что происходит с памятью, когда приложение свернуто? Нужно ли доверять фигуре, показанной в диспетчере задач?
Спасибо
PS1:
Нет никаких изменений в поведении, если я добавлю или не добавлю это в свой список:
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
PS2:
Я поместил кнопку с кодом, и GC мало что восстанавливает (она падает, скажем, с 700 МБ до 680 МБ):
GC.Collect();
GC.WaitForPendingFinalizers();