List.clear内存问题

Axx*_*ian 3 c# memory memory-management list

我有一个程序来处理一堆包含许多列的csv文件,以便用户可以提取特定的列并将它们写入另一个更小的csv文件,并且只包含它们所需的内容.由于最多可以有800万行,我已经使用列表创建了一个队列系统,它在列表缓冲区中添加了一些(一次50000行),以便编写者可以编写该段,然后使用listbuffer[i].clear();删除它,所以我使用更少的内存,并限制缓冲区只包含10个项目,保持总内存使用低至我需要它.

我的问题是,在listbuffer[i].clear();整个程序完成之前,我不会放弃它以前使用的内存,而是重新初始化缓冲区,以便下次使用时它是空白的.

**listbuffer是一个List<List<List<string>>>

这样做会更有意义......

listbuffer [行块] [行#] [列#]

有没有办法告诉列表放开list[i]正在使用的内存?

谢谢!

Han*_*ant 6

是的,使用List<T>.Clear()清除对列表中所有对象的引用并将该Count属性设置为0.它并没有释放参考到存储对象引用的基本阵列.清除后,可以将Capacity属性设置为0,以释放对该阵列的引用.

如果你确实遇到了OOM问题,那么这样做并不是一种治愈方法,它可能会造成更多的地址空间碎片问题.请查看此答案,以获取有关如何避免在大对象堆中创建过多垃圾的提示.