EF大数据批量添加性能问题
2024-08-29 15:50:28
前几天做一个批量发消息的功能,因为要向消息表中批量写入数据,用的EF框架的插入方法;不用不知道,一用吓一跳;就10000条数据就耗时好几分钟,对应追求用户体验的我来说这是极不能容忍的,后来改为拼接SQL,性能提高了好几倍;现在来分享一下经验:
原始的方法类似这种:
public ActionResult Add(ItemDetails entity)
{
var sw = new Stopwatch();
sw.Start();
using (db)
{
for (var i = ; i < ; i++)
{
db.ItemDetails.Add(entity);
db.SaveChanges();
}
}
sw.Stop();
var date = sw.Elapsed;
return Json(string.Format("总耗时:{0}", date));
}
来看看添加10000条数据耗时:
就10000条数据就耗时这么久,要是上百万的数据量,那简直就不能想象,再来看看优化后的:
生成SQL的方法:
public class ItemDetailBatch
{
public static string BatchAdd(ItemDetails entity)
{
SqlParameter [] paras=
{
new SqlParameter("@Item_Name",SqlDbType.VarChar,),
new SqlParameter("@Item_Price",SqlDbType.Int),
new SqlParameter("@Image_Name",SqlDbType.VarChar,),
new SqlParameter("@Description",SqlDbType.VarChar,),
new SqlParameter("@AddedBy",SqlDbType.VarChar,)
};
paras[] .Value= entity.Item_Name;
paras[].Value = entity.Item_Price;
paras[].Value = entity.Image_Name;
paras[].Value = entity.Description;
paras[].Value = entity.AddedBy;
var sb=new StringBuilder();
sb.Append("insert into ItemDetails (Item_Name,Item_Price,Image_Name,Description,AddedBy) ");
sb.AppendFormat("values ('{0}',{1},'{2}','{3}','{4}')", paras[].Value, paras[].Value, paras[].Value,paras[].Value, paras[].Value);
return sb.ToString();
}
}
Controller层调用:
public ActionResult Add(ItemDetails entity)
{
var sw = new Stopwatch();
sw.Start();
using (var db = new ShoppingDBConn())
{
var sql = new StringBuilder();
for (int i = ; i < ; i++)
{
//生成SQL
sql.Append(ItemDetailBatch.BatchAdd(entity));
}
//一次性执行SQL
db.Database.ExecuteSqlCommand(sql.ToString());
}
sw.Stop();
var date = sw.Elapsed;
return Json(string.Format("总耗时:{0}", date));
}
界面数据:
同样10000条总耗时:
EF没添加一次都要向数据库提交一次,而直接拼接SQL的方法就是减少与数据库的交互次数,一次性提交执行所有数据;
最新文章
- 自定义制作iso镜像
- 优先队列priority_queue的比较函数
- mysql-5.6.23-winx64.zip版本安装记录
- SqlServer根据时段统计数据
- JS 面向对象 编程设计
- python中列表的操作
- sentinel.conf配置
- J2ee 巴巴网站制作(二)
- CentOS 6.5下安装MySql 5.7
- Codevs1992题解
- 将类数组对象(array-like object)转化为数组对象(Array object)
- centos 6.3 vnc连接—— catalog is not properly configured, attempting to determine an appropriate font p
- BaLaBaLa
- Thirft框架快速入门
- iOS网络基础
- checkeds 选中获取tbale表格中某一列td标签中的值
- .NET Core多平台开发体验[3]: Linux (Windows Linux子系统)
- QTCPSOCKET 客户端已连接 而服务器无响应
- http/https与websocket的ws/wss的关系以及通过Nginx的配置
- Confluence 6 虚拟文件和文件夹
热门文章
- python操作redis详解
- Android复习
- Linux环境下proc的配置c/c++操作数据库简单示例
- 双态运维联盟(BOA)正式成立
- 完全用nosql轻松打造千万级数据量的微博系统(转)
- window 安装 Twisted 遇到的问题
- (2.16)Mysql之SQL基础——函数
- 运行HBase应用开发程序产生异常,提示信息包含org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory的解决办法
- 使用Ajax向服务器端发送请求
- CentOS7系统上部署.net core程序