表单关闭时,使用的内存不会减少

时间:2013-07-22 16:29:22

标签: c# winforms memory memory-management memory-leaks

我用C#(WinForms)编写了一个有很多表单的程序。我以这种方式展示表格:

Form_Sell frm = new Form_Sell();
frm.Show();

当我显示多个表单时,我的程序的已用内存增加了,当我关闭所有新表单时它不会减少! (我在任务管理器中检查我的程序的已用内存)为什么会发生?我该怎么办?

  

我在表单的FormClosed事件中使用了GC.Collect()。但它不起作用(对已用内存没有影响)

     

我用空表格测试它。没有控制,没有。但是当我显示表单内存增加时,当我关闭时,内存不会减少!

2 个答案:

答案 0 :(得分:1)

垃圾收集器是不确定的。当它感到压力时,它只会释放内存。因此,仅仅因为你关闭Form并不意味着它会立即释放内存。

因此,只需检查任务管理器以查看是否已为单个Form释放内存,这不是检测内存泄漏的好方法。

要真正地,真正强制GC摆脱内存,如果存在包含本机资源的项目,单个GC.Collect()调用是不够的。试试这个:

GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();

试试看,看看你的记忆力是否有所改变。

答案 1 :(得分:0)

我认为您需要使用:

frm.Dispose();

这样,它将释放用过的内存。然后再次运行GC,看看会发生什么。