【发布时间】:2018-01-19 07:41:00
【问题描述】:
我有一个处理大型数据集的进程,处理Parallel.ForEach 中的记录,然后将结果存储在ConcurrentQueue<List<string>> 中。因此处理了一条记录,记录中的每个字段都会生成一个字符串,然后将其添加到List。在记录的末尾List 则为Enqueued,并在保存所有已处理记录的ConcurrentQueue 上进行进一步处理。
在处理该集合几个小时后,我注意到我的 CPU 使用率已经从新的一波上升到保持相当高的水平,并且处理一组记录的时间开始增加。
我在这里的假设是List 被填满,然后复制到一个新的更大的List 中。随着大小的增加,需要跟上此容量的 CPU,初始化周期也会增加。我正在使用的数据集大小不确定,因为每条记录都有可变数量的子记录。父记录的数量通常在 500k 左右。
所以我的第一个想法是将List初始化为父记录的Count。由于子记录,List 仍然必须增长,但至少必须增长更少的次数。但是,是否有其他集合替代 List 可以更好地扩展?还是比我的第一直觉更好的方法?
【问题讨论】:
标签: c# scalability