我遵循了this SO Question中的建议。它对我不起作用。这是我的情况和与之相关的代码
我有一个非常大的列表,它有2.04M项目。我将其读入内存进行排序,然后将其写入.csv
文件。我有11个.csv
个文件需要阅读,然后排序。第一次迭代为我提供了超过1GB的内存使用量。我尝试将列表设置为null
。我尝试拨打List.Clear()
我也尝试了List.TrimExcess()
。我也等待GC
做它的事情。希望它知道没有读取或写入该列表。
这是我正在使用的代码。任何建议总是非常感谢。
foreach (var zone in zones)
{
var filePath = string.Format("outputs/zone-{0}.csv", zone);
var lines = new List<string>();
using (StreamReader reader = new StreamReader(filePath))
{
var headers = reader.ReadLine();
while(! reader.EndOfStream)
{
var line = reader.ReadLine();
lines.Add(line);
}
//sort the file, then rewrite the file into inputs
lines = lines.OrderByDescending(l => l.ElementAt(0)).ThenByDescending(l => l.ElementAt(1)).ToList();
using (StreamWriter writer = new StreamWriter(string.Format("inputs/zone-{0}-sorted.csv", zone)))
{
writer.WriteLine(headers);
writer.Flush();
foreach (var line in lines)
{
writer.WriteLine(line);
writer.Flush();
}
}
lines.Clear();
lines.TrimExcess();
}
}
答案 0 :(得分:-2)
尝试将整件事放在dbWriteTable(connection, "testTable", testTable_2, overwrite=TRUE)
:
using
虽然我不确定嵌套的using (var lines = new List<string>())
{ ... }
s。
相反,如果您有using
,请添加lines.Clear;
。这应该鼓励垃圾收集器。