EF性能优化(C# 版 潘鹏)
2015-08-29 00:12
369 查看
情况介绍
在项目中,我用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语句来操作。可以参考:
/article/2198002.html
8.多表只需存一张
遇到这样的情况,P、T两张表,关系是1—–(0,1)的关系,你可能会先存入P表的数据,然后foreach P表的数据,找到对应的给T表的导航属性赋值,然后存入这条数据到T表,这个问题很严重也可笑,但是我身上缺犯了,只需要存 必须存导航数据(T表数据),有关联的表数据自然存入了(P表)结尾
上述我总结的方法中,没有使用SQL语句,原先花费1小时20分钟的事,现在花费70s,竟然真的做到了。相关文章推荐
- C# ListView用法详解
- C# 统计代码时间
- c# AE 闪烁和定位
- C#读取Excel2007的文件
- C#操作Excel总结
- C# PC端读取INI文件处理
- C#如何通过反射获取属性值
- c# 多线程编程
- flex与C# Socket通信
- 零基础学习.NET平台和Csharp编程开发
- C#IISRESET服务
- c#线程同步
- C#调用微软自带的计算器、记事本等软件
- C#调用微软自带的计算器、记事本等软件
- c#模拟请求获取与设置cookies
- C#线程篇---Task(任务)和线程池不得不说的秘密(5)
- C# Socket通信
- C# ZedGraph 控件各属性以及示例
- c# byte[] 与string转化
- C# 中的委托和事件