假设我们有这样一个数组:
var arr = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Run Code Online (Sandbox Code Playgroud)
我想执行聚合:
var sum = arr.Aggregate((a, b) => a + b);
Run Code Online (Sandbox Code Playgroud)
当然,这只是简化它的一个例子.我没有处理int,但需要合并的更复杂的对象(它们是树).但是,这种聚合效果非常糟糕,因为它从左向右迭代,添加了两个相互对立的元素.在int的情况下,这没有任何区别,但是在复杂对象的情况下,更好的解决方案是以树的方式执行聚合.这是什么意思?
55
36 19
10 26 19
3 7 11 15 19
1 2 3 4 5 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)
我希望这个架构能够说清楚.
如何在C#的LINQ中实现这一目标?
您可以使用PLINQ(并行LINQ).
Parallel Aggregation模式使用在计算结束时合并的非共享局部变量来给出最终结果.对于部分的,局部计算的结果,使用非共享局部变量是循环的步骤如何彼此独立.
如果调用AsParallel扩展方法,则指示编译器绑定到PLINQ而不是LINQ.该程序将使用表达式中所有进一步查询操作的并行版本.
在您的情况下,代码将是:
var sum = arr.AsParallel().Aggregate((a, b) => a + b);
Run Code Online (Sandbox Code Playgroud)
在这里您可以找到更多信息:https://msdn.microsoft.com/en-us/library/ff963547.aspx
| 归档时间: |
|
| 查看次数: |
507 次 |
| 最近记录: |