zoukankan      html  css  js  c++  java
  • 并行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

  • 相关阅读:
    Codeforces 754A Lesha and array splitting (搜索)
    浅入分析Linux
    MakeFile基本使用
    Mac 安装YCM
    Homebrew 配置
    虚拟机复制操作CentOS6导致eth0转为eth0以至于网络服务启动失败的解决方案
    Kickstart安装
    Linux编译安装MySQL
    Python源码读后小结
    编译原理小结
  • 原文地址:https://www.cnblogs.com/musexiaoluo/p/7189958.html
Copyright © 2011-2022 走看看