.net 如何在WinForm中清除用户控件的内存?

.net 如何在WinForm中清除用户控件的内存?,.net,winforms,memory,dispose,.net,Winforms,Memory,Dispose,我有一堆用户控件,每一个都在不同的菜单选项上填充屏幕,我想杀死前一个(清除内存),我不能将其硬编码,因为我不知道在运行时显示的前一个控件是什么。仅使用this.Controls.Remove('uc\u foo')从表单中删除控件并不能完全清除内存(我与taskmgr进行了检查) 使用foreach迭代表单控件&applicatingobject\u reference=null会导致错误“无法赋值,因为它是foreach迭代变量” 对this.Controls[i]=null的访问被拒绝,因为

我有一堆用户控件,每一个都在不同的菜单选项上填充屏幕,我想杀死前一个(清除内存),我不能将其硬编码,因为我不知道在运行时显示的前一个控件是什么。仅使用
this.Controls.Remove('uc\u foo')
从表单中删除控件并不能完全清除内存(我与taskmgr进行了检查)

使用foreach迭代表单控件&applicating
object\u reference=null
会导致错误“无法赋值,因为它是foreach迭代变量”

对this.Controls[i]=null的访问被拒绝,因为它是只读的

那么我该如何摆脱它呢


更新据我所知,如果我从表单中删除控件,并且没有任何其他引用,最终它会从内存中清除,它不会像我写
object\u reference=null
那样立即生效,因此我不会立即看到taskmgr中的内存下降,但是垃圾收集会在情绪正常时进行。删除控件不会处理它

试一试


此外,确保订阅该控件的所有事件处理程序都已取消订阅,并且在处理对象时维护集合(如果适用)。@IAbstract-我试图写入
uc_foo.Load-=uc_foo.uc_foo\u Load这是我能找到的唯一事件处理程序,但内存没有改变。仅当我写入
object\u reference=null
内存清除时?取消订阅处理程序不会减少内存占用。简单的好建议,当他们被处理时,清理对象。
if (this.Controls.ContainsKey("uc_foo"))
  this.Controls["uc_foo"].Dispose();