Plinq内部的Plinq?

3
假设我有一个 DataTable。
var dt = getDataTable();

然后我执行

Parallel.For (0, dt.Rows.Count, i => Foo (dt.Rows[i]));

Foo是一个函数,它在一行数据上执行一些计算。

是否应该Foo中使用Plinq?还是(已经划分后再划分没有意义.)

1个回答

4
Foo是否应该使用Plinq?还是不应该?
通常情况下,您通常只想在尽可能高的“最高级别”上进行并行处理。通过制作更大的工作项,您最大化了总吞吐量,因为您减少了调度工作所需的开销。
如果您在Parallel.For循环中使用PLINQ,您将添加开销(以便调度工作项),但不能利用更多的核心,因此可能会降低您的整体性能。因此,在这种情况下,我不建议在Foo中使用PLINQ(如果DataTable有足够的行可并行处理)。

嗨@Reed。那我应该如何知道哪一部分应该并行处理?是For循环还是Foo工作?标准是什么?在DT中有更多的行还是在FOO中有更密集的CPU? - Royi Namir
通常情况下,您希望选择“最外层”的级别,因为这将产生最大的单个工作项。在这种情况下,您的最外层循环将是for循环,因此这就是我要并行化的地方。 - Reed Copsey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接