清除与大型列表关联的内存

时间:2017-01-04 14:16:29

标签: c# csv garbage-collection

我遵循了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();

    }
}

1 个答案:

答案 0 :(得分:-2)

尝试将整件事放在dbWriteTable(connection, "testTable", testTable_2, overwrite=TRUE)

using

虽然我不确定嵌套的using (var lines = new List<string>()) { ... } s。

相反,如果您有using,请添加lines.Clear;。这应该鼓励垃圾收集器。