我多次向列表添加20 Mb,以便应用程序消耗600 MB。但是,为什么我清除列表,内存没有被释放。
这是我的代码
List<int> data = new List<int>();
const int TwentyMB = 20 * 1024 * 1024;
public MainForm()
{
InitializeComponent();
}
private void AddDataButton_Click(object sender, EventArgs e)
{
for (var i = 0; i < TwentyMB; i++)
{
data.Add(i);
}
}
private void DestroyButton_Click(object sender, EventArgs e)
{
data.Clear();
data.Capacity = 0;
}
直到我调用GC.Collect,内存被释放
private void CollectButton_Click(object sender, EventArgs e)
{
GC.Collect();
}
谁能告诉我为什么记忆不会释放? GC何时自动工作?
答案 0 :(得分:2)
因为系统不需要内存。 GC尽可能少地工作。
答案 1 :(得分:1)
触发垃圾收集的条件:
垃圾收集时间可能因运行的计算机和可用资源而异。在你的情况下,你可以看到调用GC.Collect实际上释放了内存,所以没有什么可担心的。如果你在清除清单后等待几分钟,你可能会看到同样的事情发生,但正如我所说,这个时间会有所不同