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

时间:2011-08-15 09:33:35

标签: c# .net winforms user-controls garbage-collection

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

当我想在面板中添加它时,我创建了一个新的用户控件实例,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);

但是我的内存使用量不断增加,我该如何释放这段内存?

有关更多信息......每个用户控件都会使用一个连接智能卡的类,并执行一些命令来读取和写入卡。

我还有一个后台工作人员,可以检测卡插入或弹出的时间。

2 个答案:

答案 0 :(得分:2)

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

我希望记忆最初会上升 - 如果从不发生故障,你就会在某处徘徊参考。您可能正在订阅事件,并且当不再需要已订阅的对象时,您不会取消订阅这些事件。这是.NET应用程序中内存泄漏的最常见原因(尽管处理非托管代码紧随其后)。

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

答案 1 :(得分:0)

无论垃圾收集器在何时运行以及何时不需要时都非常聪明,有许多错误源可以根据事件处理和对象的不同生命周期有效地解决内存泄漏问题。这是SO之前的一个主题(例如here),我已经写了一些关于我们在一个项目上做的一些错误,这些错误是导致内存泄漏的原因:Do you think your Windows.Forms Application has no memory leaks?