-2

我有 IEnumerable 集合,如下所示。这是收藏的集合。主集合有 10 个项目,每个项目有 100k 个项目。

我的 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);
});

谢谢

4

3 回答 3

1

瓶颈可能会添加到vesselList添加可能会阻塞操作的地方。所以其他线程可能会等待其他线程已经将行添加到列表中。

如果您想要精确的结果,请使用一些分析器。

于 2018-12-14T10:46:31.557 回答
1

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

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

于 2018-12-14T10:46:50.543 回答
-2

如果您使用的是 MSSQL,另一种方法是进行 BULK 插入。

我过去有两种方法:

  1. SqlBulkCopy

  2. 具有表值参数的存储过程 (并从 C# 将数据作为 DataTable 发送)

这样,我认为它会少于一秒钟。

于 2018-12-14T10:53:46.480 回答