一个Entity Framework、ADO.NET查询性能测试
Entity Framework自然是会比ADO.NET性能慢点,这个不多说了。直接上结果。
本该用测试项目的,不过我建了个aspx。下面是随便测20遍得到的结果

补充!!把12行改成 list = db.Role.AsNoTracking().ToList();
由于这只做查询,不需要上下文进行跟踪。效率瞬间提升平均3-5倍,超越SqlDataAdapter,(其实很多人用SqlDataAdapter而不是用SqlCommand)
测试代码(建aspx,nuget拿EF6.1dll,建数据库建表Role,自己插入6万条数据,有主键自增)
string connStr = "server=localhost;database=EF;uid=sa;pwd=your1234;Persist Security Info=True";
List<Role> list = new List<Role>();
DateTime start = DateTime.MinValue;
DateTime end = DateTime.MinValue;
Response.Write("查询6万条数据耗时测试 <br />");
using (var db = new DBContext(connStr))
{
start = DateTime.Now;
list = db.Role.ToList();
end = DateTime.Now;
Response.Write("EF6.1,耗时:" + (end - start).ToString() + " <br />");
}
start = DateTime.Now;
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
SqlCommand cmd = new SqlCommand("select * from [Role]", conn);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
list.Add(new Role()
{
ID = dr.GetInt32(),
Name = dr.GetString(),
Desc = dr.GetString(),
CreateDate = dr.GetDateTime(),
ModifyDate = dr.GetDateTime()
});
}
dr.Close();
end = DateTime.Now;
Response.Write("ADO.NET SqlCommand + SqlDataReader,耗时:" + (end - start).ToString() + " <br />");
start = DateTime.Now;
SqlDataAdapter sda = new SqlDataAdapter("select * from [Role]", conn);
var ds = new DataSet();
sda.Fill(ds);
list = (from item in ds.Tables[].AsEnumerable()
select new Role
{
ID = item.Field<int>("ID"),
Name = item.Field<string>("Name"),
Desc = item.Field<string>("Desc"),
CreateDate = item.Field<DateTime>("CreateDate"),
ModifyDate = item.Field<DateTime>("ModifyDate"),
}).ToList();
conn.Close();
end = DateTime.Now;
Response.Write("ADO.NET SqlDataAdapter + DataSet,耗时:" + (end - start).ToString() + " <br />");
EF其实是不错的东西,楼主很喜欢;很多人说EF性能差,不过我觉得EF很利于开发进度。
一个Entity Framework、ADO.NET查询性能测试的更多相关文章
- 关于Entity Framework自动关联查询与自动关联更新导航属性对应的实体注意事项说明
一.首先了解下Entity Framework 自动关联查询: Entity Framework 自动关联查询,有三种方法:Lazy Loading(延迟加载),Eager Loading(预先加载) ...
- Entity Framework入门教程: Entity Framework支持的查询方式
Entity Framework支持的查询方式有三种 LINQ to Entities Entity SQL Native SQL [LINQ to Entities] LINQ(语言集成查询)是从V ...
- Entity Framework常用的查询方式
Entity Framework支持的查询方式有三种 LINQ to Entities Entity SQL Native SQL [LINQ to Entities] LINQ(语言集成查询)是从V ...
- Entity Framework做IN查询
开发中遇到的Too high level of nesting for select错误 项目使用了Entity Framework结合Mysql, 遇到了一个非常奇怪的性能问题,一个看起来非常简单的 ...
- Entity Framework Core Like 查询揭秘
在Entity Framework Core 2.0中增加一个很酷的功能:EF.Functions.Like(),最终解析为SQL中的Like语句,以便于在 LINQ 查询中直接调用. 不过Entit ...
- Entity Framework中实现查询的几种方法
在介绍几种方法前,献上一张图,希望图的作者不要追究我的盗图之过.本文的内容是我自学时的笔记,自学的内容来自网络.手打的代码,切不可直接复制过去用,会有好多错别字什么的. Entity SQL 类似于S ...
- 如何使用 Entity Framework 构造动态查询表达式
一般的程序员做上几年以后, 或多或少的都有些代码的积累, 我也不例外. 作为微软技术程序员, 自从Linq和EF出来之后, 就基本上爱不释手了, 且不说执行效率的问题, 单单就开发效率和代码的可移植性 ...
- 发现了一个entity framework的BUG
小弟学浅才疏可能是小题大做,但遇上了并且让我麻烦了一阵,就值得记下来 BUG的过程就是我在建立实体模型的时候 命名了一个叫system的实体模型 导致了所有生成类中 引用using system失败
- Entity Framework 多对多查询的写法
同学们,看下面的代码段就明白了: 一对多: public ICollection<ReportLookup> GetReportLookup(IEnumerable<Guid> ...
随机推荐
- 简单的数据库备份语句--Oracle+SQLSERVER
1. 工作中经常需要备份数据库表, 有时候经常需要baidu或者是询问,简单些一下.. 如果备份表不存在时: Oracle的语法 create table zhaobsh as select * fr ...
- CentOS 离线安装Gitlab-ce
1. 上gtilab的官网,找了一下安装说明.. 首先安装 依赖的包 sudo yum install -y curl policycoreutils-python openssh-server cr ...
- static方法
http://www.cnblogs.com/dolphin0520/p/3799052.html 方便在没有创建对象的情况下来进行调用(方法/变量). 虽然在静态方法中不能访问非静态成员方法和非静态 ...
- ubuntu安装命令
sudo apt-get update 更新源sudo apt-get install package 安装包sudo apt-get remove package 删除包sudo apt-cach ...
- BZOJ1563 NOI2009诗人小G(动态规划+决策单调性)
设f[i]为前i行的最小不协调度,转移枚举这一行从哪开始,显然有f[i]=min{f[j]+abs(s[i]-s[j]+i-j-1-m)p}.大胆猜想有决策单调性就好了.证明看起来很麻烦,从略.注意需 ...
- MT【204】离散型最值
(联赛一试2006,14).将2006表示成5个正整数$x_1,x_2,x_3,x_4,x_5$之和.记$S=\sum\limits_{1\le i<j\le5}{x_ix_j}$问:(1) 当 ...
- MT【51】一道三角求最值问题
[Genius is one percent inspiration and ninety-nine percent perspiration]--- 爱迪生 [Without the one per ...
- 【BZOJ1925】[SDOI2010]地精部落(动态规划)
[BZOJ1925][SDOI2010]地精部落(动态规划) 题面 BZOJ 洛谷 题解 一道性质\(dp\)题.(所以当然是照搬学长PPT了啊 先来罗列性质,我们称题目所求的序列为抖动序列: 一个抖 ...
- 【ARC065E】??
Description 链接 Solution 问题其实就是从一个点出发,每次可以走与其曼哈顿距离恰好为一个常数\(d\)的点 显然不可能一一走完所有的边,这样复杂度下界至少是\(O(ans)\) 我 ...
- 洛谷P5163 WD与地图
只有洛谷的毒瘤才会在毒瘤月赛里出毒瘤题...... 题意:三个操作,删边,改变点权,求点x所在强连通分量内前k大点权之和. 解:狗屎毒瘤数据结构乱堆...... 整体二分套(tarjan+并查集) + ...