【发布时间】:2013-07-22 16:29:22
【问题描述】:
我用 C# (WinForms) 编写了一个具有多种表单的程序。我以这种方式显示表单:
Form_Sell frm = new Form_Sell();
frm.Show();
当我显示许多表单时,我的程序使用的内存增加了,当我关闭所有新表单时,它并没有减少! (我在任务管理器中检查了我程序的已用内存)为什么会发生?我该怎么办?
我在表单的 FormClosed 事件中使用了 GC.Collect()。但它不起作用(对已用内存没有影响)
我用空表格测试它。没有控制,什么都没有。但是当我显示表单内存增加时,当我关闭它时,内存并没有减少!
【问题讨论】:
-
这意味着你在某处持有对这些表单的引用。发生这种情况的方式有很多种,有些是显式的,有些是更微妙的(例如,在将事件处理程序分配给寿命较长的对象时,关闭 lambda 中的表单引用)。没有更多信息,我们真的没什么好说的。
-
@Servy 我用空表单测试它。没有控制,什么都没有。但是当我显示表单内存增加并且当我关闭它时内存不会减少!
-
在这种情况下,GC 需要一些时间来清理内存。除非程序消耗大量内存到您开始实际耗尽或遇到其他问题的程度,否则不要担心。
-
@Servy 我的程序必须运行几个月而不会中断。并且以这种方式使用我的程序的内存太多了。我担心这个。
-
那么你不需要担心内存会被马上清理干净,你只需要确保它最终被清理干净>,这就是 GC 会做的事情。在您实际使用它的情况下对其进行测试。如果您在几个小时内使用该程序时内存稳步增加,那么您可能在某个地方出现内存泄漏,但仅仅因为它增加了几秒钟并不意味着您有问题。
标签: c# winforms memory memory-management memory-leaks