• PLINQ测试结果


    View Code
     1     public class PLINQ
    2 {
    3 static int[] arr = Enumerable.Range(654321, 101010).ToArray();
    4
    5 public static int _computeTimes = 0;
    6
    7 public static void Test ()
    8 {
    9 Utils.Measure("Sequential", () =>
    10 {
    11 bool[] results = new bool[arr.Length];
    12 for (int i = 0; i < arr.Length; i++)
    13 {
    14 results[i] = Utils.IsPrimeInt(arr[i]);
    15 }
    16 });
    17
    18 Utils.Measure("LINQ", () =>
    19 {
    20 bool[] results = arr.
    21 Select(x => Utils.IsPrimeInt(x)).
    22 ToArray();
    23 });
    24
    25 Utils.Measure("PLINQ", () =>
    26 {
    27 bool[] results = arr.AsParallel().AsOrdered().
    28 Select(x => Utils.IsPrimeInt(x)).
    29 ToArray();
    30 });
    31
    32 Console.WriteLine(_computeTimes.ToString());
    33 }
    34 }
    35
    36 class Utils
    37 {
    38 public static void Measure ( string name, Action func )
    39 {
    40 Stopwatch stopwatch = new Stopwatch();
    41 stopwatch.Start();
    42 func();
    43 stopwatch.Stop();
    44 Console.WriteLine("-------------------------");
    45 Console.WriteLine("" + name);
    46 Console.WriteLine(" Time: " + stopwatch.ElapsedMilliseconds + " ms");
    47 Console.WriteLine("-------------------------");
    48
    49 }
    50
    51 public static bool IsPrime ( long x )
    52 {
    53 if (x <= 2)
    54 return x == 2;
    55 if (x % 2 == 0)
    56 return false;
    57
    58 long sqrtx = (long)Math.Ceiling(Math.Sqrt(x));
    59 for (long i = 3; i <= sqrtx; i++)
    60 {
    61 if (x % i == 0)
    62 return false;
    63 }
    64 return true;
    65 }
    66
    67
    68 public static bool IsPrimeInt ( int x )
    69 {
    70 if (x <= 2)
    71 return x == 2;
    72 if (x % 2 == 0)
    73 return false;
    74
    75 int sqrtx = (int)Math.Ceiling(Math.Sqrt(x));
    76 for (int i = 3; i <= sqrtx; i++)
    77 {
    78 //PLINQ._computeTimes = PLINQ._computeTimes + 1;
    79 if (x % i == 0)
    80 return false;
    81 }
    82 return true;
    83 }
    84
    85 }

    Int32整数运算:

      五百万到一千万左右 运算速度区别不大

      一千万以上PLINQ较快

    Int64

      三百万以上PLINQ较快

    双核四线程处理器测试

  • 相关阅读:
    在CentOS-6.9里安装openvswitch-2.5.4
    Django 2.0.7 使用小知识
    微信小程序 存储数据到本地以及本地获取数据
    微信小程序目录结构与配置介绍
    微信小程序视图层介绍及用法
    小程序 wx.request请求
    小程序的启动流程(生命周期)
    小程序的双线程模型
    小程序之基础组件
    小程序之路由跳转
  • 原文地址:https://www.cnblogs.com/scottgu/p/2251783.html
Copyright © 2020-2023  润新知