При следовании за моим вопросом здесь, если я заменяю изображение в поле изображения, я должен расположить исходное изображение сначала?
Или, что относительно этой ситуации:
Dim bm As New Bitmap(32,32)
bm = New Bitmap(32,32)
bm = New Bitmap(32,32)
bm = New Bitmap(32,32)
Делает bm
должен только быть расположен в конце, или он должен быть расположен перед каждым воссозданием?
Спасибо все для ответов. Большой контроль там с моей стороны. Я знал, что управление заботилось о расположении его детей, но мне не пришло в голову, что я должен расположить старое изображение, если бы я заменил его.
Да, вы должны избавиться от старого объекта, прежде чем создавать новое изображение поверх той же переменной. Создавая новое изображение с той же переменной, вы удаляете ссылку на него. Если нет ссылок на старый объект, это означает, что он должен быть получен сборщиком мусора (GC). Хотя технически это «должно» в конечном итоге привести к освобождению памяти, предполагая, что финализатор позаботится о неуправляемых ресурсах, это большое предположение (вы даже не можете действительно предположить, что финализатор будет вызван) , и это требует дополнительной работы для системы.Нестандартные финализаторы вызывают дополнительную работу для GC с точки зрения повышения уровня сборки мусора, в результате чего требуется больше времени для освобождения памяти и количества запусков GC для этого.
Предполагается, что все написано, чтобы гарантировать, что финализатор обработает это. Каждый раз, когда у объекта есть метод Dispose (все, что реализует IDisposable, что и BitMap), его следует вызывать перед удалением ссылки на объект (выпадение из области видимости, удаление ссылки на объект и т. Д.).
Вот статья о том, как сборщик мусора работает в .net
http://www.devx.com/dotnet/Article/33167
Вот как MS утверждает, что утилита удаления / завершения должна быть реализована:
Да, вы должны. Он реализует IDisposable.
Как общее правило, утилизируйте все объекты, реализующие IDisposable. Не оставляйте это на GC.
Нужно ли удалять bm только в конце, или его следует удалять перед каждым воссозданием?
Его следует удалять перед каждым " отдых ». Не путайте объект со ссылкой на объект. «new Bitmap» создает новый объект. «bm» - это ссылка, которая указывает на этот объект. Они не одинаковы. Здесь вы не «воссоздаете» какой-либо объект - вы создаете новый объект, а затем отбрасываете все ссылки на предыдущий объект, что означает, что я буду собирать мусор через некоторое время в (ближайшем) будущем.