我决定在 C# 中使用 .NET 2.0 做一个简单的 Windows 窗体项目,以测试并查看究竟是什么导致了我的其他主要 UI 应用程序中似乎“不断增长的内存泄漏”。
我在这个简单的项目中所做的是创建两个表单:Form1 和 Form2
Form1 有一个大按钮,用于弹出 Form2 的新实例。
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 应用程序显然比这复杂得多,如果有的话,这种类型的内存增加很可能只占我看到的整体内存增加的一部分。尽管如此,它仍然很明显,并且在具有多种形式的项目中,这在任务管理器中看起来很糟糕,因为它看起来像内存泄漏。
那么首先,这是内存泄漏吗?
其次,即使不是,有什么办法可以防止这种情况发生吗?