【问题标题】:Difference between Parallel.ForEach and ParallelEnumerable.ForAll [duplicate]Parallel.ForEach 和 ParallelEnumerable.ForAll 之间的区别 [重复]
【发布时间】:2013-06-06 23:54:37
【问题描述】:

我有一个模型类的集合,我不想将每个类单独映射到视图模型类。

我可以使用Parallel.ForEachParallelEnumerable.ForAll,那么两者之间有什么区别(如果有的话)?

我在 MSDN 上找不到任何东西。

【问题讨论】:

    标签: c# .net linq c#-4.0 plinq


    【解决方案1】:

    我可以使用 Parallel.ForEach 或 ParallelEnumerable.ForAll,那么两者之间有什么区别(如果有的话)?

    Parallel.ForEach 相当于在普通代码中使用foreach

    ParallelEnumerable.ForAll 方法实际上等效于 List<T>.ForEach

    虽然ForAll 方法要求您已经使用PLINQ,但两者的执行和工作方式相似,因为您需要ParallelEnumerableParallel.ForEach 直接作用于任何 IEnumerable<T>

    总的来说,我更喜欢Parallel.ForEach,因为ForAll 的唯一目的是引起副作用。这样做有一些缺点,如described in detail by Eric Lippert

    【讨论】:

    • 嗯嗯,所以基本上它们几乎相同,除了ParallelEnumerable 需要一个实际的ParallelEnumerable
    • 我同意副作用部分,但我想在这种情况下并行映射项目,我认为这样做是有效的。如果我错了,请纠正我,但Parallel.ForEach 确实并行执行迭代......对吗?
    • @StanR。是的,它确实。 “映射”建议使用 PLINQ Select() 子句,而不是 ForAll() 语句,因为 Select 实际上是一个映射操作...
    • 我想我在这里浪费时间,因为我必须将所有映射项收集回并发列表中,对于上下文切换而言,对于一个小列表来说可能不值得。
    • @StanR。取决于 # 以及您对映射的操作 - 如果您正在构建队列并且需要处理,您可以通过 msdn.microsoft.com/en-us/library/dd267303.aspx 从 PLINQ.Select() 结果中直接构建它
    猜你喜欢
    • 1970-01-01
    • 2014-08-16
    • 2011-04-08
    • 2012-11-24
    • 2013-06-05
    • 2021-09-29
    • 2020-05-27
    • 2016-03-23
    • 2012-08-11
    相关资源
    最近更新 更多