繁体   English   中英

处理所有子控件和数据 - C#

[英]Disposing All Child Controls and Data - C#

我在面板内加载用户控件,用户控件本身包含许多内部控件,例如标签页、面板、按钮,并且在其面板内还会有一些其他用户控件。

假设我在 MainPanel 内加载主用户控件,如果我使用这个:

MainPanel.Controls.Clear();

它不会清除内存,所以我用它来代替:

while (MainPanel.Controls.Count > 0) MainPanel.Controls[0].Dispose();

但它似乎会处理主用户控件并稍微清除内存,我认为该用户控件中的所有控件仍然存在于内存中。 如何递归遍历所有内部控件并一一处理它们?

此外,在用户控件内部,有几个加载一些数据的网格控件。 它们没有绑定到任何数据库,只是通过 LINQ 从数据库和new命令中获取一些数据。 我是否需要在处置控件之前销毁这些数据,否则它们会被控件处置从内存中删除?

https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/unmanaged?view=netframework-4.8

使用完组件后调用 Dispose。 Dispose 方法使组件处于不可用状态。 调用 Dispose 后,您必须释放对 Component 的所有引用,以便垃圾收集器可以回收 Component 占用的内存。 有关更多信息,请参阅清理非托管资源和实施处置方法。

for (int i = MainPanel.Controls.Count - 1; i >= 0; i--) { 
    MainPanel.Controls[i].Dispose();
}

您不需要取消引用任何其他数据。 只有控件才能被 gc 拾取。

请记住,如果您取消引用具有 ObjectB 的 ControlA,则 ObjectB 也会取消引用并且可以被拾取。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM