并呼吁明确的处置的物品也?
-
21-09-2019 - |
题
许多次没有一个明确的方法,将删除所有的项目集合,这些项目置。
喜欢,
toolStripMenuItem.DropDownItems.Clear();
是足够的,或者我应该称呼这样的:
foreach (ToolStripItem item in toolStripMenuItem.DropDownItems)
{
toolStripMenuItem.DropDownItems.Remove(item);
item.Dispose();
}
编辑:嗯。是的一个例子不是一个问题,对于那些说明是足够的,我找到另一个实例中,卡也项目的收集和清晰的方法。但TabControls可能有复杂的控制(至少我有),它需要明确处理(即使他们置自动地在某一点通过气相色谱,因为他们采取巨大的存储器)。我猜最好的答案是迪沃的评论处置的物品,然后打电话清楚的。
解决方案
问: 不会吗?
A: 没有 - Clear
不处理项目(他们可以被用于其他部分应用程序)。
所以,如果你ToolStripItems是标准的。净的,应该 Clear
是否足够?之后的一些思考,我会说"可能不"。
是啊,这是真的,如果你有任何引用。在其他应用程序的一部分。净 GarbageCollector 将摧毁(地使用类 析构)。但是,它的 不会叫的 Dispose(true)
方法, ,那就是,但是,需要为形成的 IDisposable
组成。
实际上,我认为,你会的,但是,需要明确 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
类)。
我不这么认为,更多的,它可能会导致许多逻辑问题,因为你可能有收集供以后使用参考该对象。如果你没有引用到对象垃圾收集器将处理后中的物体。