У меня есть холст на окне, и на этом холсте у меня есть изображение. Это изображение System.Windows.Controls.Image, поэтому у него нет / не требуется метод Dispose.
Однако, когда я установил его Source на новый (я установил его с помощью MemoryStream и с BitmapSource, оба имеют одинаковый эффект), его предыдущий Source не был полностью очищен. Использование памяти увеличивается, даже когда я заставляю его использовать то же изображение снова.
После загрузки достаточного количества изображений произойдет сбой с исключением из-за нехватки памяти около 3 ГБ. К сожалению, это довольно большие изображения, поэтому для этого требуется всего 17.
Используя Dot Memory, я вижу, что «утечка» находится в неуправляемой памяти, что может означать, что я пропускаю вызов Dispose (), или ImageSource все еще используется в программе, но я сомневаюсь в этом это локальная переменная, и она нигде не передается по ссылке.
Я пытался заставить сборщики мусора и заморозить BitmapSource, но оба не дали эффекта.
Есть ли способ заставить его полностью очистить предыдущее изображение перед загрузкой в следующем? Я что-то пропустил? Я неправильно понимаю ситуацию?
Вот изображение, показывающее график использования памяти, оно показывает, что изображение частично очищается при отображении нового. Сборки мусора - неисполненные коллекции 1-го поколения, меня беспокоит, что их так много.
![memory usage graph](https://i.stack.imgur.com/FKra0.jpg)