并行LINQ PLinq
1、描述
并行 LINQ (PLINQ) 是 LINQ 模式的并行实现。 PLINQ 查询在许多方面类似于非并行 LINQ to Objects 查询。 PLINQ 尝试充分利用系统中的所有处理器, 它利用所有处理器的方法是,将数据源分成片段,然后在多个处理器上对单独工作线程上的每个片段并行执行查询。 在许多情况下,并行执行意味着查询运行速度显著提高。
PLINQ有两个重要的类:ParallelEnumerable和ParallelQuery.其中, ParallelEnumerable包含许多在ParallelQuery类型上进行操作的扩展方法. ParallelEnumerable同样实现许多在上Enumerable的方法,因为 ParallelQuery 实现IEnumerable接口,使用我们可以很方便的创建ParallelQuery类的一个实例并运用在ParallelEnumerable上实现的并行方法. 做了一简单测试,如下。当数据量大时就能体现出效率差距。
2、案例代码以及结果
2.1 demoCode
class Program { static void Main(string[] args) { //一般方法 Test(); //并行计算方法 TestAsParallel(); Console.ReadLine(); } private static void TestAsParallel() { Console.WriteLine($"并行查询开始"); var t1 = DateTime.Now; int[] source = new int[100000000]; for (int i = 0; i < source.Length; i++) { source[i] = i; } var presult = source.AsParallel().Select(c => Math.Pow(c, 3)); var Tspan= DateTime.Now.Subtract(t1); Console.WriteLine($"并行查询耗时{Tspan.TotalSeconds}秒"); } private static void Test() { Console.WriteLine($"一般查询开始"); var t1 = DateTime.Now; int[] source = new int[100000000]; var temp = new double[100000000]; for (int i = 0; i < source.Length; i++) { source[i] = i; } for (int i = 0; i < source.Length; i++) { temp[i]= Math.Pow(source[i], 3); } var Tspan = DateTime.Now.Subtract(t1); Console.WriteLine($"一般查询耗时{Tspan.TotalSeconds}秒"); } }
2.2 resultOoutput