我的第一个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。代码可读性也比“命令式”的编程要好。

  测试截图:

    使用循环的:

        

       使用查询语法的:

    我的第一个PLINQ尝试

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

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

 

你可能感兴趣的:(LINQ)