我有几个非常大的文件,每个文件大小为
500MB++
,包含整数值(实际上更复杂一些)。我正在循环读取这些文件,并计算所有文件的最大值。但由于某种原因,在处理过程中内存不断增长,似乎GC永远不释放由先前的lines
实例获取的内存。
我无法流式传输数据,必须针对每个文件使用GetFileLines
。如果为一个文件存储lines
所需的实际内存量为500MB
,那么在处理10个文件后,为什么会使用5GB
的RAM
?最终在处理15个文件后崩溃并出现“内存不足”异常。
计算:
int max = int.MinValue;
for (int i = 0; i < 10; i++)
{
IEnumerable<string> lines = Db.GetFileLines(i);
max = Math.Max(max, lines.Max(t=>int.Parse(t)));
}
GetFileLines 代码:
public static List<string> GetFileLines(int i)
{
string path = GetPath(i);
//
List<string> lines = new List<string>();
string line;
using (StreamReader reader = File.OpenText(path))
{
while ((line = reader.ReadLine()) != null)
{
lines.Add(line);
}
reader.Close();
reader.Dispose(); // should I bother?
}
return lines;
}
lines.Clear()
方法吗? - opewix