zoukankan      html  css  js  c++  java
  • 我的第一个PLINQ尝试

      本人对LINQ这东西有极大的兴趣,很喜欢LINQ这种查询语法。在看了晴天猪“《Effective C#》读书笔记——条目8:推荐使用查询语法而不是循环<C#语言习惯> ”文章后忍不住尝试了一把。

      1.生成接下来要使用的测试数据

     1 //生成数据
     2         private static List<int> getList()
     3         {
     4             List<int> vals1 = new List<int>();
     5             for (int i = 0; i < 50; i++)
     6             {
     7                 int a = new Random().Next(0, 10000);
     8                 Thread.Sleep(30);
     9                 vals1.Add(a);
    10             }
    11             return vals1;
    12         }

      2.使用循环,也就是“命令式”的

     1             List<int> vals = getList();
     2 
     3             Stopwatch sw = new Stopwatch();
     4             sw.Start();
     5 
     6             //用循环的方式对数据进行平方运算
     7             for (int i = 0; i < vals.Count; i++)
     8             {
     9                 vals[i] *= vals[i];
    10             }
    11 
    12             //循环的方式打印出结果
    13             foreach (var item in vals)
    14             {
    15                 Console.Write(item + " ");
    16             }
    17             sw.Stop();
    18             //耗时
    19             long time = sw.ElapsedTicks;
    20             Console.WriteLine("耗时: " + time.ToString());

      “命令式”也就是传统的循环查询

      3.不使用循环,使用查询语法,也就是“声明式”的

     1 Stopwatch sw1 = new Stopwatch();
     2 
     3             List<int> vals1 = getList();
     4 
     5             sw1.Start();
     6 
     7             //使用查询将列表中的数据执行平方操作
     8             //要使用PLINQ时,要在数据源上调用 AsParallel() 扩展方法来选择使用 PLINQ
     9             var v = (from a in vals1 select a * a).AsParallel();
    10 
    11             //对数据源中的每个元素并行调用指定的操作
    12             //遍历数据源并输出每个元素
    13             v.ForAll(a => Console.Write(a + " "));
    14 
    15             sw1.Stop();
    16             long time1 = sw1.ElapsedTicks;
    17             Console.WriteLine("耗时: " + time1.ToString());

      从上面给出的这两个例子可以明显看出“查询语法”方式写的代码看着比较舒服吧,行数就比循环的少,呵呵,LINQ。代码可读性也比“命令式”的编程要好。

      测试截图:

        使用循环的:

            

           使用查询语法的:

        

       虽然说数据每次生成的不一样,计算的耗时可能也不同,但是循环的耗时为10145 而查询语法的为132278,显然不是一个数量级的。

       可以看出使用循环执行速度比使用查询语法的速度要快,但是使用查询语法写出来的代码可读性比较高,较使用循环的容易理解。写的不一定好也不一定全对,但我还会继续往下学习,希望各位大虾们提出意见或建议。

     

  • 相关阅读:
    Linux停SVN提交时强制写日志
    svn文件提交时强制写注释
    ssh 登录出现的几种错误以及解决办法
    Linux内存调试工具初探-MEMWATCH
    段错误调试神器
    Linux环境下段错误的产生原因及调试方法小结
    pthread_create()之前的属性设置
    Linux netstat命令详解
    Linux route命令详解和使用示例(查看和操作IP路由表)
    tomcat最大线程数的设置
  • 原文地址:https://www.cnblogs.com/g1mist/p/3041309.html
Copyright © 2011-2022 走看看