代码之家  ›  专栏  ›  技术社区  ›  Micah

嵌套并行查询

  •  4
  • Micah  · 技术社区  · 15 年前

    运行嵌套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 回复  |  直到 15 年前
        1
  •  6
  •   Tomas Petricek    15 年前

    使用嵌套查询没有根本问题,所以您当然可以做到这一点,PLINQ将尽力尽可能高效地并行化代码。然而,这可能是一件需要考虑的事情,如果你想获得最好的性能,你一定要进行一些测量。

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

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

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

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