2010-02-06 4 views
4

Простой вопрос ...Удалить(), Очистить() или Утилизировать()

У меня есть элементы управления, которые пользователь может перетаскивать по моей форме во время выполнения. И они также могут удалить их ... Должен ли я просто позвонить .Dispose();, когда они нажмут кнопку «Удалить», или мне нужно сделать что-то вроде panel1.Controls.Clear(Control);? ...Или что-то другое?

спасибо :)

Bael

ответ

5

Вы должны удалить его из родительского управления коллекции, как описано в ответ Дарин Димитрова, а также называют Dispose:

panel.Controls.Remove(someControlInstance); 
someControlInstance.Dispose(); 

Вы должны всегда вызывать Dispose на объекты, которые реализуют IDisposable, когда вы закончите с ними, так что любые неуправляемые ресурсы, которыми они владеют, немедленно освобождаются.

+0

Только то, что я надеялся услышать. Большое спасибо Джо. –

2

Просто удалите элемент управления из панели:

panel.Controls.Remove(someControlInstance); 

Жила больше нет ссылок на него, это будет зависеть от сбора мусора и неуправляемых ресурсов будут надлежащим образом утилизированы.

+0

«С учетом мусора Coll ..» ... Итак, он будет удален после выхода приложения? Будет ли это иметь какое-либо значение (производительность разумно), если я смогу как-то избавиться от него сразу после того, как я удалю его из панели управления? постскриптум Спасибо за ответ :) –

+1

Он не будет удален, когда приложение выйдет, но когда запустят сборщик мусора, который является неопределенным. –

+3

Он будет удален, когда GC решает, и это может произойти в середине запуска приложения, а также в конце. Разница здесь заключается в том, что если вы вызовете Dispose() явно, то будет завершена финализация объекта, а при следующем запуске GC очистит память объекта, иначе в первом запуске GC поместит объект в очередь завершения и очистит его память при другом запуске. подробнее по теме здесь: http://msdn.microsoft.com/en-us/library/ms973837.aspx –

Смежные вопросы