【发布时间】:2014-06-22 19:53:46
【问题描述】:
我已经使用using 指令创建了我的选项表单的一个新实例,所以当我完成它时它会自动处理掉。我是否需要在关闭表单之前将其动态创建的控件处理掉,或者当我调用this.Close() 时它们会被自动处理掉?
【问题讨论】:
-
只要他们有一个 Parent 集(他们应该有),dispose 是自动的。
标签: c# winforms memory-leaks dispose
我已经使用using 指令创建了我的选项表单的一个新实例,所以当我完成它时它会自动处理掉。我是否需要在关闭表单之前将其动态创建的控件处理掉,或者当我调用this.Close() 时它们会被自动处理掉?
【问题讨论】:
标签: c# winforms memory-leaks dispose
通常不会,所有控件都是动态创建的。通常在 InitializeComponent() 方法中,当代码出现在其他地方时,它并没有根本的不同。动态移除控件会让你陷入麻烦。
控件在其 Parent 被释放时自动释放。因此,只要您通过 Collection 属性将它们添加到它们的父级,那么您就不需要额外的代码来处理。触发器正在关闭使用 Show() 方法显示的表单的窗口,代码中的 using 语句用于使用 ShowDialog() 显示的表单。
您可以使用任务管理器检查是否正确。使用 View + Select Columns 添加USER Objects 列(右键单击 Windows 8 中的列表视图标题)。计数器非常可靠。重复创建和关闭表单不能不断增加显示值。
泄漏用户对象是 Winforms 中非常常见的错误,垃圾收集器不会让您摆脱麻烦。始终非常警惕代码中的任何 ControlCollection.Clear() 或 Remove/At() 语句。
【讨论】: