注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天涯倦客的博客

祝福你朋友永远快乐!

 
 
 

日志

 
 

EF性能优化(C# 版 潘鹏)  

2017-07-25 23:51:19|  分类: asp.net |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

转自:http://blog.csdn.net/panpen120/article/details/48066485

情况介绍

在项目中,我用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,竟然真的做到了。

  评论这张
 
阅读(8)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017