PLINQ中的ForAll和Select有什么区别

时间:2019-04-27 20:21:44

标签: .net performance linq ironpython plinq

intro to PLINQ中,文档似乎显示了两种从无序流程中获取数据的不同方式。在一种情况下,AsParallel可以与Unsorted和Select或SelectMany方法一起使用。 SelectMany说

  

将序列的每个元素并行投影到IEnumerable   并将结果序列展平为一个序列。

所以要从函数中获取返回列表,我这样称呼它:

def genGraph(node,constData):
    #do something
    return (constData+1,constData+2,constData+3)

newGraph = Graph.AsParallel().SelectMany(lambda node: genGraph(node,constData) ).ToList()

另一种方法是使用ForAll和添加的ConcurrentBag,但不返回任何内容。

  

当不需要保存订单时,可以更快地执行查询,并且   当结果的处理本身可以并行化时,请使用   ForAll方法执行PLINQ查询。

def genGraph(node,constData,newGraph):
    #do something
    newGraph.Add(constData+1,constData+2,constData+3)

newGraph = Concurrent.ConcurrentBag[type((0,0,0))]()
Graph.AsParallel().ForAll(lambda node: genGraph(node,constData,newGraph) )

因此,第一个表示与IEnumerable并行投影,第二个表示可以并行处理。对我来说,这听起来也一样。在我的代码中,它目前也运行相同的时间,但是我想知道是否还有其他我不理解的情况。

0 个答案:

没有答案