c# - 一个如此简单的 Winform 程序——但我可以恢复内存吗?

标签 c# winforms memory-leaks

我决定在 C# 中使用 .NET 2.0 做一个简单的 Windows Form 项目来测试并查看到底是什么导致了我的其他主要 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 应用程序显然比这复杂得多,如果有的话,这种类型的内存增加很可能只占我所看到的整体内存增加的一部分。尽管如此,它仍然很明显,并且在具有多种形式的项目中,这在任务管理器中看起来非常糟糕,因为它看起来像内存泄漏。

那么首先,这是内存泄漏吗?

其次,即使不是,有什么办法可以避免吗?

最佳答案

不要太在意事物“看起来像”什么。 .NET 很好地管理内存,如果它不收集内存,就意味着您有足够的空闲内存可用,那么它为什么要费心呢?内存是用来使用的,而不是囤积和保持免费。

这不是问题,它会在需要时自行处理。

关于c# - 一个如此简单的 Winform 程序——但我可以恢复内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16430832/

相关文章:

c# - 使用 sql 查询结果填充 datagridview

c# - 如何减少和清除内存泄漏?

c# - TPL 完成与完成

c# - 在 Cookies 或 Session (ASP.Net MVC 3) 中保存本地化?

c# - 再次单击 TextBox 使其散焦

c# - 文本框仅在其他线程完成后更新

CGO 我正在传递一个 C 结构,它带有一个指向 go 函数的值的指针,

javascript - 当前浏览器中的闭包和 (jQuery) DOM 事件导致内存泄漏?

c# - 将 BSON 数组添加到 MongoDB 中的 BsonDocument

c# - Web API 2 Asp.Net - 设置显式超时值