Да, вы должны удалить старый объект, прежде чем создавать новое изображение поверх той же переменной. Создавая новое изображение с той же переменной, вы удаляете ссылку на него. Если нет ссылок на старый объект, вы указываете, что он должен быть собран GC (сборщик мусора). Хотя технически это «должно» в конечном итоге привести к освобождению памяти, если предположить, что финализатор позаботится о том, чтобы о неуправляемых ресурсах позаботились, это большое предположение (вы даже не можете предположить, что финализатор будет вызываться) , и это вызывает больше работы для системы. Финализаторы не по умолчанию вызывают дополнительную работу для GC с точки зрения повышения уровня сборки мусора, в результате чего требуется больше времени для освобождения памяти, а также количество раз, которое GC должен выполнить для этого.
Предполагается, что все написано, чтобы убедиться, что финализатор обработает его. Каждый раз, когда объект имеет метод Dispose (все, что реализует IDisposable, что делает BitMap), его следует вызывать перед удалением ссылки на объект (выпадение из области видимости, удаление ссылки на объект и т. Д.).
Вот статья о том, как работает сборщик мусора в .net
http://www.devx.com/dotnet/Article/33167
Вот как MS говорит, что dispose / finalizer должен быть реализован:
http://msdn.microsoft.com/en-us/library/b1yfkh5e.aspx