IEnumerable<T> 接口上有 AsParallel 方法,Partitioner 类上也提供了这个方法,使用这个类我们可以自定义分块的建立。
首先你可以在 System.Collections.Concurrent 命名空间中找到这个类,他提供了一个 Create 方法,第一个参数接受一个数组或者实现 IList<T>的对象,第二个参数是个 Boolean 类型的参数。根据不同的传入参数,该方法返回一个特定分块类型的变量。(比如传入一个数组,返回 DynamicPartitionerForArray<Tsource>或StaticPartitionerForArray<TSource>,这些类型都继承自一个虚类OrderablePartitioner<TSource>)
下面是实例的代码:
var result = (from x in Partitioner.Create(data, true).AsParallel()
where Math.Log(x) < 4 select x).Average();
你还可以通过调用 WithExecutionMode / WithDegreeOfParallelism 方法来定义其他的分块逻辑。
- WithExecutionMode 传入一个名为ParallelExecutionMode 参数(值为Default 或ForceParallelism),Default 方式下能防止过度使用并行处理。
- WithDegreeOfParallelism 传入一个 integer 值来指定最大的并行任务数。
本文介绍了如何使用.NET Framework中的Partitioner类创建自定义分块以优化并行处理。通过示例代码展示了如何利用Partitioner.Create方法及AsParallel方法实现并行查询,并介绍了如何进一步调整并行执行模式和并行度。
4121

被折叠的 条评论
为什么被折叠?



