LINQ能不能用系列(一)LINQ to Object 效率比对
前言
简介:LINQ,语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展。
分类:LINQ to Object, LINQ to XML, LINQ to SQL, LINQ to DataSet,LINQ to ADO.NET。
相关:相信linq大家已经很熟悉了,如果有不太熟的,可以参考MSDN 地址:http://msdn.microsoft.com/zh-cn/library/bb397933.aspx
缘由:Linq 到底能不能用?究竟好不好用,很多时候大家还是众说纷纭,有人迷茫,有人观望,有人觉得无所谓,或者还有人说只是语法糖,中看不中用,哪我们这个系列就为大家揭开谜团。首先来看LINQ to Object在数组筛选方面的效率测试吧。
实例分析
测试环境:visual studio 2011 Beta(netframework 4.0+)C# 控制台程序
测试需求:从10000000条数据中查询大于100的数据。
核心代码(LINQ):
var linqList = from num in list1 where num > 100 select num;
完整代码:
/// <summary> /// 效率测试 /// </summary> /// <param name="testCount">第几次测试</param> private static void timeTest(int testCount) { const int listCount = 10000000; // 数组长度 Random random = new Random(); // 数据随机构建值 // 数组构建 List<int> listData = new List<int>(); for (int i = 0; i < listCount; i++) { listData.Add(random.Next(10000)); } // LINQ 测试 Stopwatch linq_Stopwatch = new Stopwatch(); linq_Stopwatch.Start(); var linqList = from num in listData where num > 100 select num; var linqCount = linqList.Count(); linq_Stopwatch.Stop(); // 普通方式 测试 Stopwatch before_Stopwatch = new Stopwatch(); before_Stopwatch.Start(); List<int> beforeList = new List<int>(listCount); for (int i = 0; i < listData.Count(); i++) { if (listData[i] > 100) beforeList.Add(listData[i]); } var beforeCount = beforeList.Count; before_Stopwatch.Stop(); // 打印结果 Console.WriteLine(String.Format("第{0}次测试,测试:{5}条数据。\n\r \t LINQ用时:{1}毫秒,筛选了{2}条数据。\n\r\t 普通用时:{3}毫秒,筛选了{4}条数据。\r\n", testCount, linq_Stopwatch.ElapsedMilliseconds, linqCount, before_Stopwatch.ElapsedMilliseconds, beforeCount, listCount)); }
结果
结论:由此可知LINQ to Object在做数据处理,效率要好于手动判断,当然LINQ伟大应该是她的语法简洁与优雅。在做数据处理时个人推荐使用LINQ to Object!
关注下面二维码,订阅更多精彩内容。