Звонящий Ясный располагает объекты также?

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

Как,

toolStripMenuItem.DropDownItems.Clear();

достаточно, или если я должен звонить как этот:

foreach (ToolStripItem item in toolStripMenuItem.DropDownItems)
{
  toolStripMenuItem.DropDownItems.Remove(item);
  item.Dispose();
}

Править: Хорошо ToolStripItem является примером не вопрос для тех, кто говорит Ясный, достаточно, я нашел другой пример, TabControl имеет также набор элементов и четкий метод. Но TabControls может иметь сложные средства управления (по крайней мере, я имею), который должен быть, явно Располагают (даже если они Расположены автоматически в какой-то момент GC, вызывают, они берут огромную память). Я предполагаю, что лучший ответ является комментарием divo, чтобы расположить объекты и затем назвать ясным.

22
задан Priyank Bolia 28 December 2009 в 12:22
поделиться

4 ответа

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();
}

EDIT

Я также создал следующий поток , чтобы прояснить этот вопрос в более общем виде.

8
ответ дан 29 November 2019 в 05:54
поделиться

Я так не думаю, более того, это может вызвать много логических проблем, потому что вы можете иметь ссылку на этот объект в коллекции для последующего использования. Если у вас нет ссылок на эти объекты, то "Сборщик мусора" утилизирует эти объекты позже

.
0
ответ дан 29 November 2019 в 05:54
поделиться

Вызов Clear не утилизирует предметы, но удаляет ссылку из коллекции на предметы. Если это была единственная ссылка на предметы, то в какой-то момент они будут автоматически утилизированы (что Вы не можете предсказать, но можете контролировать, используя класс GC).

.
2
ответ дан 29 November 2019 в 05:54
поделиться

При работе с неуправляемой памятью, общими ресурсами или большими объемами памяти следует полагаться на вызов Dispose(). Не похоже на этот случай.

2
ответ дан 29 November 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: