【发布时间】:2022-01-04 02:26:08
【问题描述】:
考虑这个将整数放入列表的简单示例程序:
void Main()
{
Experiment experiment = new();
var task = Task.Run(experiment.Start);
}
public class Experiment
{
public async Task Start()
{
List<int> values = new();
for (int i = 0; i < 1000000000; i++)
values.Add(i);
await Task.CompletedTask;
}
}
运行时,它使用大约 7 GB 的内存。但随后这些数据就停留在那里。即使我清除列表或将其设置为空,程序仍然占用 7 GB。当我再次运行它时,RAM使用率突然下降到10 MB,然后又猛增到7 GB,让我觉得只有用这种方法开始一个新任务,数据才会真正释放。
为什么任务完成后内存没有释放?我不明白为什么列表不是临时的并且一直占用内存。我做错了什么?
【问题讨论】:
-
尝试等待一段时间。 GC 将运行并释放内存。出于测试目的,您可以尝试使用
GC.Collect()强制 GC,但不要在生产中使用强制 GC。