4

运行嵌套的 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
  });
});
4

1 回答 1

6

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

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

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

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

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

于 2010-10-03T23:04:48.110 回答