EF性能优化

情况介绍

在项目中,我用EF存储2W条数据时,花费竟然1小时20分钟左右,然后我只能搜肠刮肚想法优化……

测试草图

测试草图,仅供借鉴看,下面我会详细总结。

优化方法总结

1.连接保持畅通

意思是不要在需要的时候连接了不需要的时候断开,需要了又去连接(特殊情况除外),目的在于减少对数据库的操作。

2.关闭EF的一些配置

EF使用时,会在Config中配置,对于使用CRUD功能,有一些是用不到的,可以关闭,关闭后的测试效果加快几秒,略微提升。

3.存入List

EF支持AddRange,如果需要存5条数据,将这5条数据放入list一次存入,要比一条一条的存大大的快。

4.查找数据用Linq or Lamba

遇到这样的情况,你需要从数据库中取某一条特定的数据,然后处理这条数据后存入另一个表,用foreach是吧,太慢了,换成Linq,上面草图中有个备注,再换成lamba试试。

5.数据放入内存

如果要从一个表中多次找数据来使用,那不如第一步先将这个表中所有数据或者需要的那部分特征数据都先放入内存中,从内存中读取的速度,大大的快于操作数据库,而这目的,也就是减少操作数据库的次数,耗性能。

6.使用BulkInsert

使用插件Extended,使用其中的BulkSaveChanges代替EF原生态的SaveChanges来保存数据,附截图来引用一段话:

然后我亲测结果如图:

1000条数据,BulkSaveChanges花费1s,SaveChanges花费27s……

插件名:

对于该插件的一些使用方法,我也附上网址:

http://www.zzzprojects.com/products/dotnet-development/bulk-operations/

7.使用SQL语句

如果你对速度还不满意,可以CRUD,直接使用SQL语句来操作。

可以参考:

http://my.oschina.net/Yamazaki/blog/185621

8.多表只需存一张

遇到这样的情况,P、T两张表,关系是1—–(0,1)的关系,你可能会先存入P表的数据,然后foreach P表的数据,找到对应的给T表的导航属性赋值,然后存入这条数据到T表,这个问题很严重也可笑,但是我身上缺犯了,只需要存 必须存导航数据(T表数据),有关联的表数据自然存入了(P表)

结尾

上述我总结的方法中,没有使用SQL语句,原先花费1小时20分钟的事,现在花费70s,竟然真的做到了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 22:41:53

EF性能优化的相关文章

EF性能优化-有人说EF性能低,我想说:EF确实不如ADO.NET

十年河东,十年河西,莫欺少年穷. EF就如同那个少年,ADO.NET则是一位壮年.毕竟ADO.NET出生在EF之前,而EF所走的路属于模仿ADO.NET. 也就是说:你所写的LINQ查询,最后还是要转化为ADO.NET的SQL语句,转化过程中无形降低了EF的执行效率. 但是,使用EF的一个好处就是系统便于维护,减少了系统开发时间,降低了生成成本. OK,上述只是昨个简单的对比,那么在实际编码过程中,我们应当怎样提升EF的性能呢? 1.EF使用SqlQuery 上述已经说的很明白了,EF效率低于A

C#中 EF 性能优化

https://www.cnblogs.com/chenwolong/p/7531955.html EF使用AsNoTracking(),无跟踪查询技术(查询出来的数据不可以修改,如果你做了修改,你会发现修改并不成功) 原文地址:https://www.cnblogs.com/personblog/p/11562941.html

C#实用杂记-EF全性能优化技巧

原文链接:http://www.makmong.com/947.html#comment-31 EntityFramework 优化建议 2016年1月15日 下午4:54 LEILINKANG Entity Framework目前最新版本是6.1.3,当然Entity Framework 7 目前还是预览版,并不能投入正式生产环境,估计正式版16年第一季度会出来,了解过EF7的部分新特性后,还是狠狠期待一下滴. EF性能问题一直为开发者所诟病,最让人纠结的也是这块,所以此次我也来谈谈EF的性能

Entityframework 性能优化

在谈谈EF的性能优化之前请允许笔者废话几句.虽然说笔者以前有接触EF,但真正意义上的接触EF算是今年的8月份吧!那时公司里面有一个产品模块化的项目需要用到ORM.当时有两个选择1.EF,2.NHibernate. 说实在的两者的口碑都不怎么样...最后我还是支持了下微软的EF,毕竟做.Net开发用自家的会方便很多把.一开始在网上查得的一些博文会说EF各种性能不好!(PS:今天跟客户谈项目的时候又被喷了)不过我还是傻里傻气的保持乐观的态度,性能不好就想办法让它好起来!!!不做怎么知道呢!下面我一些

使用EntityFrameWork 5.0面向存储过程(&执行Sql,性能优化)

EntityFrameWork5.0简单使用 概要: 使用EntityFrameWork5.0执行存储过程,Sql语句(DDL/DML)以及一点关于优化性能的方面; 正文: 在myef.tt下会包含需要展示数据的存储过程(select) 模型浏览器如下, 1.EF如何调用存储过程: Note:数据库的表对应的实体,以类对象表示,在EF容器下可以直接操作,比如db.UserAccount直接拿到UserAccount实体对象,存储过程,视图也是同样道理,也是可以通过EF上下文容器得到; 2.EF执

数据仓库中的 SQL 性能优化(Hive篇)

一个Hive查询生成多个map reduce job,一个map reduce job又有map,reduce,spill,shuffle,sort等多个阶段,所以针对hive查询的优化可以大致分为针对MR中单个步骤的优化(其中又会有细分),针对MR全局的优化,和针对整个查询(多MR job)的优化,下文会分别阐述. 在开始之前,先把MR的流程图帖出来(摘自Hadoop权威指南),方便后面对照.另外要说明的是,这个优化只是针对Hive 0.9版本,而不是后来Hortonwork发起Stinger

C# 大型电商项目性能优化(一)

经过几个月的忙碌,我厂最近的电商平台项目终于上线,期间遇到的问题以及解决方案,也可以拿来和大家多做交流了. 我厂的项目大多采用C#.net,使用逐渐发展并流行起来的EF(Entity Framework)框架,并搭配使用丹麦的一款主打CMS, DMS的.net web应用程序sitecore. 本篇为基础篇,侧重于阐述编码规范和一些编码技巧对系统性能的影响.不规范的编码方式,可能对单个方法或模块产生的性能影响是微不足道的,但在大型电商项目中,高并发的场景随处可见,欠妥的编码方式,可能会对整个系统

EntityFramework之原始查询及性能优化(六)

前言 在EF中我们可以通过Linq来操作实体类,但是有些时候我们必须通过原始sql语句或者存储过程来进行查询数据库,所以我们可以通过EF Code First来实现,但是SQL语句和存储过程无法进行映射,于是我们只能手动通过上下文中的SqlQuery和ExecuteSqlCommand来完成. SqlQuery sql语句查询实体 通过DbSet中的SqlQuery方法来写原始sql语句返回实体实例,如果是通过Linq查询返回的那么返回的对象将被上下文(context)所跟踪. 首先给出要操作的

EF6 的性能优化

引言 EntityFramework 6 作为微软的开源ORM框架,有着得天独厚的优势.微软也在MVC中主推EF做为ORM框架.但是在实际的项目开发中我们总是感觉到EF有些慢,或者有这样那样的问题.但实际上有时是因为我们滥用导致了问题的出现.本章就像对EF的性能优化方面的内容做个抛砖引玉,希望能给大家一点启发或者帮助. 常见的提升性能的方案 参考 Tips to improve Entity Framework Performance Async Processing in EF6 and th