2012-06-15 38 views
2

我有一堆用户控件,每一个填充不同的菜单选择屏幕上,我想杀死前一个(清除内存),我不能写它硬编码因为我无法知道运行时,这是以前的控制显示。刚从形式this.Controls.Remove('uc_foo')除去控制不完全清楚存储器(I与taskmgr选中)如何在WinForm中清除用户控件的内存?

迭代的形式与一个foreach &施加object_reference = null控件导致错误“不能分配,因为它是一个foreach迭代变量”。

访问this.Controls[i]因为它是只读

让我怎么摆脱它= NULL被拒绝?

UPDATE从我的理解,如果我请从形式控制并没有任何其他引用它,最终它会从内存中清除,它只是将不会立即像如果我写object_reference = null ,因此我不会马上看到taskmgr中的内存下降,但垃圾回收会在正确的心情下执行它。

回答

3

正确。删除控件不会处理它。

尝试

if (this.Controls.ContainsKey("uc_foo")) 
    this.Controls["uc_foo"].Dispose(); 
+1

此外,确保其订阅了该控制的任何事件处理程序取消订阅和对象被设置时集合(如果适用)被维护。 – IAbstract

+0

@IAbstract - 我试着写'uc_foo.Load - = uc_foo.UC_Foo_Load;'这是我能找到的唯一的事件处理程序,但内存没有改变。只有当我写'object_reference = null'内存清除? – BornToCode

+0

取消订阅处理程序不会减少内存占用量。在处理物品时提供清洁建议。 – IAbstract

相关问题