.net Remove()、Clear()或Dispose()

.net Remove()、Clear()或Dispose(),.net,winforms,.net,Winforms,简单的问题 我有一些控件,用户可以在运行时在我的窗体上拖动。他们也可以删除它们。。。我是否应该调用.Dispose()当他们单击删除按钮时,或者我应该执行类似于panel1.Controls.Clear(Control)的操作。。。还是别的什么 谢谢:) Bael只需从面板上卸下控制按钮: panel.Controls.Remove(someControlInstance); 一旦不再有对它的引用,它将被垃圾收集,非托管资源将被正确处置。您应该按照Darin Dimitrov的响应中所述将其从

简单的问题

我有一些控件,用户可以在运行时在我的窗体上拖动。他们也可以删除它们。。。我是否应该调用
.Dispose()当他们单击删除按钮时,或者我应该执行类似于
panel1.Controls.Clear(Control)的操作。。。还是别的什么

谢谢:)


Bael

只需从面板上卸下控制按钮:

panel.Controls.Remove(someControlInstance);

一旦不再有对它的引用,它将被垃圾收集,非托管资源将被正确处置。

您应该按照Darin Dimitrov的响应中所述将其从父控件集合中删除,并调用Dispose:

panel.Controls.Remove(someControlInstance);
someControlInstance.Dispose();

当您使用完实现IDisposable的对象时,应该始终对这些对象调用Dispose,以便立即释放它们所拥有的任何非托管资源。

“受垃圾Coll限制…”。。。那么,一旦应用程序退出,它将被处理吗?如果我在从面板控制中移除它后立即以某种方式处理它,会有什么不同(性能方面)吗?P.S.谢谢你的答案:当应用程序退出时,它不会被处理,但是当垃圾回收器运行时是不确定的。当GC决定时,它将被处理,这可能发生在你的应用程序运行中和结束时。这里的区别在于,如果显式调用Dispose(),将执行对象终结,并且在下一次运行时,GC将清理对象的内存,否则在第一次运行时,GC将把对象放入终结队列,并在另一次运行时清理其内存。更多关于这个主题的信息:谢谢Darin Dimitrov&dh。。。现在将查看该链接:)我认为这将导致内存泄漏,请参见
…该控件类的行为与任何其他.NET类不同。控件通过其句柄属性保持活动状态。它存储本机Windows句柄。只要本机窗口存在,控件对象就无法销毁。
GC似乎无法自行处理
控件。
这正是我希望听到的。非常感谢你,乔。