【发布时间】:2021-03-12 02:40:44
【问题描述】:
以下内容是否会在 5 时对 500 个项目进行并行处理,但会在 1 个项目上进行正常循环(没有性能影响)。我不希望在一次执行 1 项时使用 Parallel(如果有的话)对性能造成影响。
Parallel.ForEach(scheduledMatchups, new ParallelOptions
{
MaxDegreeOfParallelism = scheduledMatchups.Count() > 500 ? 5 : 1
},
gridItem =>
{
// Process
});
【问题讨论】:
-
用例是什么,您是在寻找一般规则,还是有特定的代码片段需要优化? 正常负载是大于还是小于500?
-
你有没有考虑把这个分支逻辑放到一个自定义的
Partitioner中? -
我不知道
Partitioner会做什么。 -
@MikeFlynn 使用自定义
Partitioner,您可以定义要从数据源创建多少块。GetPartitions返回一个IList<IEnumerator<T>>,如果元素少于 500,则可以包含单个块,如果有更多项目,则可以包含 5 个块。 Reference
标签: .net multithreading performance task-parallel-library parallel.foreach