首页 > 解决方案 > 并行执行功能和合理数量的实例

问题描述

我有一个对象列表,我必须对它们中的每一个做一些详细说明,所有这些都在尽可能少的时间内完成。

由于这些详细说明彼此独立,因此我们决定与Parallel.ForEach.

Parallel.ForEach(hugeObjectList,
    new ParallelOptions { MaxDegreeOfParallelism = 50 },
    obj => DoSomeWork(obj)
);

由于在我看来设置一个巨大的数字(例如 50 或 100)似乎不合理,ParallelOptions.MaxDegreeOfParallelism我们如何找到并行任务的最佳数量来处理这个列表?

是否在不同的核心上Parallel.Foreach启动?DoSomeWork(所以,既然我们有 4 个核心,那么正确的并行度应该是 4?)

标签: c#parallel.foreach

解决方案


询问平台应该可以让您接近最佳状态(对于 CPU 密集型工作)。

new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount  },

什么都不做是另一个很好的选择,即

//new ParallelOptions { MaxDegreeOfParallelism = 50 },

编辑

有很多带有数据库的io ...

这使得MaxDegreeOfParallelism = 1另一个非常好的候选人。或者也许是 2。

您真正应该研究的是 async/await 和异步数据库调用。不是 Parallel 类。


推荐阅读