LINQ能不能用系列(二)LINQ to SQL 效率比对
2012-05-18 18:24
369 查看
前言
很多人听说过LINQ TO SQL与ADO.NET传统方式用于不同的环境,LINQ TO SQL与ADO.NET传统方式也没有可比性,就像公交车与私家车一样,虽然是车但用途完全不同,但很少有人去探究,究竟为什么他们不同,他们不同的原因是什么,这我觉得是一个好的程序和一个普通程序最主要的区别之一。下面一起来看LINQ TO SQL效率到底如果吧。内容
测试环境:net framework 4.0 + Sql Server 2008测试用途:100w条数据 like 查询,原因添加、修改、删除消耗资源与时间相对较少,不易测试,查询里面最消耗时间的无非就是 like 与 in查询,我们就采用like 相对比较耗时与耗时间的典型来测。
测试数据:100w条测试数据(其中有一条数据有别于其他数据,在数据的最中央)
测试数据图:
View Code
#region 查询信息返回SqlDataReader /// <summary> /// 查询信息返回SqlDataReader /// </summary> /// <param name="sql">查询sql</param> /// <param name="par">SqlParameter 可选参数数组</param> /// <returns>SqlDataReader</returns> public static SqlDataReader GetSqlDataReaderBySql(string sql, params SqlParameter[] par) { using (Conn) { SqlCommand cmd = new SqlCommand(sql, Conn); if (null != par) cmd.Parameters.AddRange(par); try { cmd.Connection.Open(); return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection); } catch (Exception ex) { cmd.Connection.Close(); throw ex; } finally { cmd.Parameters.Clear(); } } } #endregion
测试类代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; namespace LINQProject { class Program { static void Main(string[] args) { for (int i = 1; i < 10; i++) { Test(i); } Console.Read(); } /// <summary> /// 效率方法测试 /// </summary> private static void Test(int testNumber) { Stopwatch linqWatch = new Stopwatch(); linqWatch.Start(); // LINQ 查询 DataClasses1DataContext db = new DataClasses1DataContext(); var glist = from g in db.gameinfo where g.gamename.Contains("Dota") select g; // foreach 遍历 foreach (var item in glist) { Console.Write("LINQ:" + item.gamename + " "); } linqWatch.Stop(); Stopwatch adoWatch = new Stopwatch(); adoWatch.Start(); // ADO.NET 查询 List<GameInfoModel> list = GameInfoBLL.GetGameInfoByGname("Dota"); // foreach 遍历 foreach (GameInfoModel item in list) { Console.WriteLine("ADO.NET:" + item.gamename); } adoWatch.Stop(); Console.WriteLine("================================结果" + testNumber + "========================================="); Console.WriteLine(String.Format("LINQ 用时:{0} \r\nADO.NET 用时:{1}", linqWatch.ElapsedMilliseconds, adoWatch.ElapsedMilliseconds)); } } }
测试项目下载:点击
结果
如图:![](http://pic002.cnblogs.com/images/2012/172074/2012051818155847.jpg)
LINQ TO SQL第一次的时候比较消耗资源,原因LINQ第一次初始化比较耗时,之后LINQ查询与ADO.NET几乎一样,在100w条数据下随然数据大同小异,但已经足够说明问题,LINQ TO SQL 还是可以用的,起码中小型项目可以放心使用。
大家如有好的建议或者意见欢迎拍板。
相关文章推荐
- LINQ能不能用系列(二)LINQ to SQL 效率比对
- LINQ能不能用系列(一)LINQ to Object 效率比对
- LINQ能不能用系列(一)LINQ to Object 效率比对
- linq to sql 系列之 linq to sql性能优化技巧
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据
- (LINQ 学习系列)(2)LINQ to SQL 查询
- Linq to Sql 学习系列之六 探究特性
- LINQ系列:LINQ to SQL Transact-SQL函数
- Linq to SQL删除或清空表的效率问题
- LINQ To SQL深入学习系列之四(LINQ查询基础)
- 查询大数据表的效率对比:Linq to SQL、Entity Framework、企业库存储过程、ADO.Net
- LINQ系列:LINQ to SQL Exists/In/Any/All/Contains
- Linq to Sql 学习系列之七 并发与事务
- Linq To Sql模式中自动生成T-SQL增删改操作系列~PropertyChanged事件实现在子类中记录属性的变化,在基类中进行统一处理
- LINQ系列:LINQ to SQL Join连接
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据
- 一步一步学Linq to sql系列文章
- LINQ to SQL系列Part 8 - Using LINQ to SQL
- LINQ to SQL系列四 使用inner join,outer join
- 对《LINQ能不能用系列(一)数组筛选效率对比》中测试的几个问题