-1

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

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

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

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

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

4

2 回答 2

1

垃圾收集器是不确定的。只有在感到压力时才会释放内存。因此,仅仅因为您关闭了 aForm并不意味着它会立即从中释放内存。

因此,仅仅检查任务管理器,看看内存是否已经被释放给单个Form,并不是检测内存泄漏的好方法。

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

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

试试看,看看你的记忆是否发生了变化。

于 2013-07-22T16:39:08.473 回答
0

I think you need to use:

frm.Dispose();

by this, it will release used memory. Then run GC again and see what happens.

于 2013-07-24T02:03:59.727 回答