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