Pri*_*lia 22 .net c# collections dispose clear
很多时候,有一个明确的方法,从集合中删除所有项目,这些项目也被处置.
喜欢,
toolStripMenuItem.DropDownItems.Clear();
Run Code Online (Sandbox Code Playgroud)
是足够的,或者我应该这样打电话:
foreach (ToolStripItem item in toolStripMenuItem.DropDownItems)
{
toolStripMenuItem.DropDownItems.Remove(item);
item.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
编辑:好吧ToolStripItem是一个不是问题的例子,对于那些说清楚已经足够的人我发现了另一个例子,TabControl也有项目集合和清除方法.但TabControls可以有复杂的控件(至少我有),需要显式Dispose(即使它们在某些时候由GC自动处理,导致它们占用大量内存).我想最好的答案是divo评论处理项目,然后打电话给清楚.
问:有吗?
答:不 - Clear
不处理这些物品(它们可以在您的应用程序的其他部分使用).
那么,如果你的ToolStripItems是标准的.NET,那应该Clear
足够了吗?经过一番反思,我会说"可能不是".
是的,如果您在应用程序的其他部分中有对ToolStripItem的任何引用,那么.NET GarbageCollector将自动销毁(使用类析构函数).但是,它不会调用该Dispose(true)
方法,也就是表单IDisposable
组件所需的方法.
其实,我相信你会,但是,需要明确Dispose
你的项目,如ToolStrip的的的Dispose方法不(替换这个由yourToolStrip):
if (!this.Items.IsReadOnly)
{
for (int i = this.Items.Count - 1; i >= 0; i--)
{
this.Items[i].Dispose();
}
this.Items.Clear();
}
Run Code Online (Sandbox Code Playgroud)
我还创建了以下线程来更一般地澄清这个问题.