Много раз существует четкий метод, который удаляет все объекты из наборов, эти объекты, расположенные также.
Как,
toolStripMenuItem.DropDownItems.Clear();
достаточно, или если я должен звонить как этот:
foreach (ToolStripItem item in toolStripMenuItem.DropDownItems)
{
toolStripMenuItem.DropDownItems.Remove(item);
item.Dispose();
}
Править: Хорошо ToolStripItem является примером не вопрос для тех, кто говорит Ясный, достаточно, я нашел другой пример, TabControl имеет также набор элементов и четкий метод. Но TabControls может иметь сложные средства управления (по крайней мере, я имею), который должен быть, явно Располагают (даже если они Расположены автоматически в какой-то момент GC, вызывают, они берут огромную память). Я предполагаю, что лучший ответ является комментарием divo, чтобы расположить объекты и затем назвать ясным.
Q: Does?
A: No - Clear
не утилизирует предметы (они могут быть использованы в других частях вашего приложения).
Итак, если ваши ToolStripItems являются стандартными .NET, должно ли быть достаточно Clear
? После некоторого размышления я бы сказал "скорее всего, нет".
Да, это правда, что если у вас будут какие-либо ссылки на ToolStripItem в другой части вашего приложения, то .NET GarbageCollector автоматически его уничтожит (воспользуйтесь классом destructor). Но, он не вызовет метод Dispose(true)
, который, однако, необходим для IDisposable компонентов формы.
Прочитайте предложенный этот и этот.
На самом деле, я считаю, что вам нужно будет явно Утилизировать
ваши Вещи, как это делает метод ToolStrip Утилизировать (замените эту на yourToolStrip):
if (!this.Items.IsReadOnly)
{
for (int i = this.Items.Count - 1; i >= 0; i--)
{
this.Items[i].Dispose();
}
this.Items.Clear();
}
Я также создал следующий поток , чтобы прояснить этот вопрос в более общем виде.
Я так не думаю, более того, это может вызвать много логических проблем, потому что вы можете иметь ссылку на этот объект в коллекции для последующего использования. Если у вас нет ссылок на эти объекты, то "Сборщик мусора" утилизирует эти объекты позже
. Вызов Clear
не утилизирует предметы, но удаляет ссылку из коллекции на предметы. Если это была единственная ссылка на предметы, то в какой-то момент они будут автоматически утилизированы (что Вы не можете предсказать, но можете контролировать, используя класс GC
).
При работе с неуправляемой памятью, общими ресурсами или большими объемами памяти следует полагаться на вызов Dispose()
. Не похоже на этот случай.