我有IEnumerable集合,如下所示。这是集合的集合。 主要收藏有10件,每件有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);
});
谢谢
答案 0 :(得分:1)
瓶颈可能会添加到vesselList
,在此添加可能会阻塞操作。因此,其他线程可能正在等待其他线程将行添加到列表中。
如果想要精确的结果,请使用一些探查器。
答案 1 :(得分:1)
所有工作都在Add()
中进行,并且假设MTObservableCollection
在该方法中使用了某种锁定,则所有线程都在互相等待以向列表中添加内容。
这听起来不像可以通过并行化加快的工作。
答案 2 :(得分:-2)
如果您使用的是MSSQL,则可以选择批量插入。
过去,我有两种方法可以做到这一点:
具有Table-Valued Parameters的存储过程(并通过C#将数据作为DataTable发送)
这样,我想不到一秒钟。