您的位置:首页 > 数据库

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));
}
}
}


测试项目下载:点击

结果

如图:



LINQ TO SQL第一次的时候比较消耗资源,原因LINQ第一次初始化比较耗时,之后LINQ查询与ADO.NET几乎一样,在100w条数据下随然数据大同小异,但已经足够说明问题,LINQ TO SQL 还是可以用的,起码中小型项目可以放心使用。

大家如有好的建议或者意见欢迎拍板。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: