运行嵌套的 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
});
});
使用嵌套查询没有基本问题,因此您当然可以这样做,并且 PLINQ 将尽最大努力尽可能高效地并行化代码。但是,这可能是需要考虑的事情,如果您想获得最佳性能,您绝对应该进行一些测量。
最佳选择取决于两个集合中的元素数量以及运行处理所需的时间。
如果外部集合足够小,那么您也需要内部循环,以便为并行化创造足够的潜力(为 PLINQ 生成足够的任务,以便它可以平衡执行)
如果外部集合包含大量元素,那么内部循环可能是不必要的,因为单个外部循环足以为 PLINQ 提供足够的并行化空间。事实上,内部循环可能只会增加开销(不过,根据我的经验,这只发生在大量元素的情况下)
此外,如果您只想并行化一个循环,它应该是外部循环。这样,所有工作都可以一次拆分,并且您只会产生一次并行化开销。