我决定在C#中用.NET 2.0做一个简单的Windows Form项目来测试,看看究竟是什么导致了我的其他主UI应用程序中的“越来越多的内存泄漏”。Winform程序如此简单 - 但我可以回忆我的记忆吗?
我在这个简单的项目所做的是创建两种形式:Form1中&窗体2
Form1上有一个很大的按钮,在弹出的窗体2的新实例。
private void button1_Click(object sender, EventArgs e)
{
Form2 fm2 = new Form2();
fm2.ShowDialog();
fm2.Dispose();
}
除非显示本身,直到用户决定关闭窗口,Form2才会做任何事情。
现在,当我启动应用程序,并按下Form1上的按钮时,我得到大约100 kb的内存使用跳转。我会关闭弹出窗口,再次按下按钮,并看到另一个100 kb增量。我会做约10-20次迭代。最后,我会在任务管理器中看到从6,880 KB - > 8,684 KB的跳转。现在,它最终会停在一定数量(本例中为8684 KB)。达到此之后,它不会再增加。
这里是我的问题:
我的主UI应用程序显然是一个很多比这个,如果有什么更复杂的,这种类型的内存增加最有可能只占我看到整个内存增加的部分。尽管如此,它仍然很明显,而且在一个有很多形式的项目中,这在任务管理器中看起来非常糟糕,因为它看起来像是内存泄漏。
所以首先,这是内存泄漏吗?
其次,即使它不是,有没有什么办法来防止这种情况?
它停止在一个相对可预测(和低点)的事实强烈表明,这不是一个泄漏。 – dlev 2013-05-08 00:38:26
您是否调用过'GC.Collect();' – ja72 2013-05-08 00:38:32
您应该几乎不会手动调用GC.Collect()。 – Kevin 2013-05-08 00:40:33