【发布时间】:2018-12-14 10:43:37
【问题描述】:
我有如下所示的 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);
});
谢谢
【问题讨论】:
-
你为什么希望一个简单的添加被加速?另外,你的锁呢?
-
首先确定您的瓶颈在哪里以及它是否受 CPU 限制或 I/O 限制。
Parallel.ForEach可以加速受 CPU 限制的工作,但前提是它适合并行化活动(例如,如果您需要锁定实际的 CPU 消耗活动,这将无济于事)。先配置文件,然后尝试优化。 -
如果它不安全,它是否快速无关紧要。
ObservableCollection不是线程安全的。您不能从多个线程安全地Add。或者您使用的是stackoverflow.com/a/23108315/34092 之类的东西(在这种情况下它是线程安全的,但仅仅是因为它实际上是单线程)? -
你用这些大量的物品做什么?为了向用户展示?还有什么?
-
i guess you dint read full question. Inside each foreach there is some logic (very primitive like comparison) happening我现在已经多次重新阅读该问题,但找不到说明该问题的文字。你能给我们指出来吗?也许更改问题中的文本颜色/粗体以更好地突出它?
标签: c# loops foreach parallel-processing parallel.foreach