C# 并行查询核心平衡

C# 并行查询核心平衡,c#,parallel-processing,plinq,C#,Parallel Processing,Plinq,我有200000个任务将并行运行以提高速度。我使用的是parallellenumerable.Range(02000).Sum(a=>/*dou\u something*/) 当任务计数器从0变为200000时,所需的迭代次数减少。a=0的任务需要最多的迭代次数,而a>100000的任务需要一次迭代或不迭代即可完成 因此,随着任务的进行,我的四核机器没有达到最大cpu利用率峰值。工作负载似乎在一开始就分配给了所有4个核心,一些核心更早地进入空闲状态,因为它们的部分主要是高as的任务。cpu利用率

我有200000个任务将并行运行以提高速度。我使用的是
parallellenumerable.Range(02000).Sum(a=>/*dou\u something*/)

当任务计数器从0变为200000时,所需的迭代次数减少。
a=0的任务需要最多的迭代次数,而
a>100000的任务需要一次迭代或不迭代即可完成


因此,随着任务的进行,我的四核机器没有达到最大cpu利用率峰值。工作负载似乎在一开始就分配给了所有4个核心,一些核心更早地进入空闲状态,因为它们的部分主要是高
a
s的任务。cpu利用率从100%开始,但逐渐下降到75~50~25%。如何从头到尾实现cpu的充分利用率?

非常简单的自我回答:用
可枚举范围(…).aspallel()替换
可并行枚举范围(0200)
,就足以解决这个问题。工作负载似乎是动态分布在
Enumerable.Range(…).aspallel()

中的。您是否尝试记录执行顺序以查看问题的具体原因?这不是一个很好的答案:它不能解释为什么它工作得更快。在不知道为什么的情况下使用某些东西可能非常危险。