我有几个非常大的文件,每个文件都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;
}