许多次没有一个明确的方法,将删除所有的项目集合,这些项目置。

喜欢,

toolStripMenuItem.DropDownItems.Clear();

是足够的,或者我应该称呼这样的:

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

编辑:嗯。是的一个例子不是一个问题,对于那些说明是足够的,我找到另一个实例中,卡也项目的收集和清晰的方法。但TabControls可能有复杂的控制(至少我有),它需要明确处理(即使他们置自动地在某一点通过气相色谱,因为他们采取巨大的存储器)。我猜最好的答案是迪沃的评论处置的物品,然后打电话清楚的。

有帮助吗?

解决方案

问: 不会吗?

A: 没有 - Clear 不处理项目(他们可以被用于其他部分应用程序)。

所以,如果你ToolStripItems是标准的。净的,应该 Clear 是否足够?之后的一些思考,我会说"可能不"。

是啊,这是真的,如果你有任何引用。在其他应用程序的一部分。净 GarbageCollector 将摧毁(地使用类 析构)。但是,它的 不会叫的 Dispose(true) 方法, ,那就是,但是,需要为形成的 IDisposable 组成。

读一propos .

实际上,我认为,你会的,但是,需要明确 Dispose 你的项目,如该工具条的 处置 方法并(取代 通过 yourToolStrip):

if (!this.Items.IsReadOnly)
{
    for (int i = this.Items.Count - 1; i >= 0; i--)
    {
        this.Items[i].Dispose();
    }
    this.Items.Clear();
}

编辑

我也创造了 下线 为了澄清这一问题更为普遍。

其他提示

您应该依靠当你处理与非托管内存,共享资源或大内存区域Dispose()电话。似乎并不此案。

调用Clear不配置的物品,但它从集合中删除的物品的参考。如果这是它们将自动被垃圾收集的项目在某些点上仅参考(你不能预测,但可以控制使用GC类)。

我不这么认为,更多的,它可能会导致许多逻辑问题,因为你可能有收集供以后使用参考该对象。如果你没有引用到对象垃圾收集器将处理后中的物体。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top