ParallelEnumerable.Range vs Enumerable.Range.AsParallel?

Roy*_*mir 7 .net c# linq parallel-processing

ParallelEnumerable.Range 和 之间有什么区别Enumerable.Range(...).AsParallel()

ParallelEnumerable.Range 创建范围分区(最适合cpu时间等于foreach项的操作)

Enumerable.Range(...).AsParallel()可能作为range或执行的地方chunk

有任何性能差异吗?我什么时候应该使用哪个?

Mik*_*oud 11

如果你正在执行一个CPU压力随着迭代而增长的操作,那么你就会想要使用,AsParallel因为它可以在迭代时进行调整.但是,如果它只是需要并行运行并且操作在迭代时不会产生更多压力,那么请使用ParallelEnumerable.Range它,因为它可以立即对工作进行分区.

请参阅此文章以获取更详细的说明.

因此,假设您在每次迭代中都执行了一些复杂的数学计算,并且随着输入值的增加,数学运算需要更长时间,您将需要使用AsParallel它以便进行调整.但是,如果您使用相同的选项设置注册表设置,您将看到性能下降,因为AsParallel没有必要与之相关的开销.