我用C#(WinForms)编写了一个有很多表单的程序。我以这种方式展示表格:
Form_Sell frm = new Form_Sell();
frm.Show();
当我显示多个表单时,我的程序的已用内存增加了,当我关闭所有新表单时它不会减少! (我在任务管理器中检查我的程序的已用内存)为什么会发生?我该怎么办?
我在表单的FormClosed事件中使用了GC.Collect()。但它不起作用(对已用内存没有影响)
我用空表格测试它。没有控制,没有。但是当我显示表单内存增加时,当我关闭时,内存不会减少!
答案 0 :(得分:1)
垃圾收集器是不确定的。当它感到压力时,它只会释放内存。因此,仅仅因为你关闭Form
并不意味着它会立即释放内存。
因此,只需检查任务管理器以查看是否已为单个Form
释放内存,这不是检测内存泄漏的好方法。
要真正地,真正强制GC摆脱内存,如果存在包含本机资源的项目,单个GC.Collect()
调用是不够的。试试这个:
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
试试看,看看你的记忆力是否有所改变。
答案 1 :(得分:0)
我认为您需要使用:
frm.Dispose();
这样,它将释放用过的内存。然后再次运行GC,看看会发生什么。