Как правило, память в конечном итоге должна автоматически освобождаться при необходимости.
Однако, чтобы это произошло, вы должны быть уверены, что объект действительно не используется: нигде не может быть ссылок на объект, включая ссылки, которые "больше не используются". Так, в частности, если вы поместите свой WriteableBitmap и оригинальный BitmapSource в переменные долгоживущего класса, они не будут освобождены, пока контейнер не будет.
Кроме того, WPF использует сохраненную модель GFX: при рендеринге вы просто сохраняете инструкции для как для рендеринга. «Инструкции» о том, как визуализировать растровое изображение, включают ссылку на растровое изображение - поэтому, если вы когда-либо будете рендерить большое растровое изображение, то какое-то время (по крайней мере, пока оно отображается на экране - даже если версия на экране мала) изображения будут сохранены.
На практике; храните ссылки на эти битовые карты только там, где они необходимы, и если контекст, в котором они живут, является долгоживущим (вызов метода long или вызов метода, генерирующий замыкание со ссылкой на битовые карты, или член long- класс жизни), затем установите их в нуль, как только они больше не нужны.
Нет необходимости вручную освобождать память; GC.Collect () должен быть лишним. Как правило, используйте GC.Collect только во время бенчмаркинга, чтобы получить представление об использовании памяти и / или начать с чистого листа. Общая производительность обычно снижается при вызовах do GC.Collect ().