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