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

标签 .net winforms memory dispose

我有一堆用户控件,每个控件都在不同的菜单选项上填充屏幕,我想杀死前一个控件(以清除内存),我无法将其写为硬编码,因为我不知道在运行时,这是之前显示的控件。仅使用 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/

相关文章:

c# - 如何在 XNA 中调整和保存 Texture2D?

c# - .Net SQL Server DDL API

c# - Combobox 上的自动完成 onkeypress 事件吃掉了 Enter 键

c# - 在 C# 桌面应用程序中漂亮地打印数学

c - 父进程和子进程的内存映射文件问题

.net - WPF 控件未显示在 WinForms 应用程序的 ElementHost 中

.net - TimeZoneInfo 与 Olson 数据库

c# - 使用事件将 UI 元素绑定(bind)到字段时,如何防止无限递归?

c# - 一段时间后 GC 包含大量固定对象

memory - 在 OpenCL 中,当工作组大小不是架构的一部分时,__local 内存如何更快?