嵌套并行查询

时间:2010-10-03 22:49:10

标签: .net-4.0 plinq

运行嵌套的PLINQ查询是否有任何问题?

例如:

//Contains roughly 7000+ elements
mycollections.AsParallel().ForAll(x => { 

  //contains 12 elements
  anothercollection.AsParallel().ForAll(y => { 
     //download some data from the web and parse it
  });
});

1 个答案:

答案 0 :(得分:6)

使用嵌套查询没有根本问题,因此您当然可以这样做,PLINQ将尽力尽可能高效地并行化代码。但是,这可能是一个需要考虑的事情,如果你想获得最佳性能,你肯定应该进行一些测量。

最佳选择取决于两个集合中的元素数量以及运行处理所需的时间。

  • 如果外部集合足够小,那么你也需要内部循环,这样你就可以创建足够的并行化潜力(为PLINQ生成足够的任务,以便它可以平衡执行)

  • 如果外部集合包含大量元素,那么内部循环可能是不必要的,因为单个外部循环足以为PLINQ提供足够的并行空间。实际上,内部循环可能只会增加开销(但根据我的经验,这只会发生在非常多的元素上)

此外,如果您要仅并行化一个循环,它应该是外部循环。这样,所有工作都可以立即拆分,并且只会产生一次并行化开销。