我有一堆用户控件,每个控件都在不同的菜单选项上填充屏幕,我想杀死前一个控件(以清除内存),我无法将其写为硬编码,因为我不知道在运行时,这是之前显示的控件。仅使用 this.Controls.Remove('uc_foo')
从表单中删除控件并不能完全清除内存(我用 taskmgr 检查过)
使用 foreach 迭代表单控件并应用 object_reference = null
会导致错误“无法分配,因为它是 foreach 迭代变量”。
访问 this.Controls[i]
= null 被拒绝,因为它是只读的
那么我该如何摆脱它呢?
更新 据我所知,如果我从表单中删除控件并且没有任何其他引用它,最终它会从内存中清除,只是不会像这样立即清除如果我写 object_reference = null
,因此我不会立即看到 taskmgr 中的内存下降,但垃圾收集会在状态良好时执行此操作
最佳答案
正确。删除控件并不会丢弃它。
尝试
if (this.Controls.ContainsKey("uc_foo"))
this.Controls["uc_foo"].Dispose();
关于.net - WinForm中如何清除用户控件的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11043730/