Parallel.Foreach并不比foreach快多少

时间:2018-12-14 10:43:37

标签: c# loops foreach parallel-processing parallel.foreach

我有IEnumerable集合,如下所示。这是集合的集合。 主要收藏有1​​0件,每件有10万件。

我的CPU有6个内核,24GB RAM,1.5TB硬盘。 3个用户做远程桌面。

 IEnumerable<AFValues> afValues = listAvgResults.Select(pointResults => pointResults[type]);

当我使用Parallel.ForEach耗时9.8,foreach耗时10秒。

MTObservableCollection<VesselData> vesselList = new MTObservableCollection<VesselData>();

Parallel.ForEach(afValues, pointValues =>
                        {
 vesselList.Add(row);
});

谢谢

3 个答案:

答案 0 :(得分:1)

瓶颈可能会添加到vesselList,在此添加可能会阻塞操作。因此,其他线程可能正在等待其他线程将行添加到列表中。

如果想要精确的结果,请使用一些探查器。

答案 1 :(得分:1)

所有工作都在Add()中进行,并且假设MTObservableCollection在该方法中使用了某种锁定,则所有线程都在互相等待以向列表中添加内容。

这听起来不像可以通过并行化加快的工作。

答案 2 :(得分:-2)

如果您使用的是MSSQL,则可以选择批量插入。

过去,我有两种方法可以做到这一点:

  1. SqlBulkCopy

  2. 具有Table-Valued Parameters的存储过程(并通过C#将数据作为DataTable发送)

这样,我想不到一秒钟。

相关问题