如何清理许多用户控件使用的内存

本文关键字:内存 控件 何清理 多用户 | 更新日期: 2023-09-27 18:05:50

我有许多用户控件,我在一个面板中只添加一个,但首先要从前一个面板中清除面板。

当我想在面板中添加用户控件时,我创建了一个用户控件的新实例,并将其他用户控件的Dispose()设置为null,以允许垃圾收集器删除它们。

例如:

// Declare the variables globally
ViewBasicInformation control1 = null;
AddBasicInformation control2 = null;
// Code inside Button
Panel.Controls.Clear(); 
control1.Dispose(); 
control1 = null;
control2 = new AddBasicInformation();  
Panel.Controls.Add(control2);

然而,我的内存使用不断增加,我如何释放这些内存?

更多信息…每个用户控件都使用一个类,该类与智能卡建立连接,并执行一些命令对智能卡进行读写。

我也有一个后台工作者检测卡何时插入或弹出

如何清理许多用户控件使用的内存

. net运行时使用垃圾收集-我建议您不要自己管理内存。

我希望内存一开始是上升的——如果从来没有下降,那么你在某个地方有悬空引用。您可能正在订阅事件,并且当不再需要已订阅的对象时,您不会取消对这些事件的订阅。这是。net应用程序中最常见的内存泄漏原因(尽管处理非托管代码是紧随其后的原因)。

请确保在清除对它的引用之前取消订阅已订阅的任何控件事件。

尽管垃圾收集器在何时必须运行和何时不需要运行方面非常聪明,但是基于事件处理和对象的不同生存期,仍然存在许多错误源,您可以有效地使自己陷入内存泄漏。这是以前关于SO的一个主题(例如在这里),我在这里写了一些关于我们在一个项目中犯的一些错误,这些错误是导致内存泄漏的原因:表单应用程序没有内存泄漏?