首页 > 代码库 > 并行LINQ PLinq

并行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

技术分享

 

并行LINQ PLinq