前几天做一个批量发消息的功能,因为要向消息表中批量写入数据,用的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的方法就是减少与数据库的交互次数,一次性提交执行所有数据;

最新文章

  1. 自定义制作iso镜像
  2. 优先队列priority_queue的比较函数
  3. mysql-5.6.23-winx64.zip版本安装记录
  4. SqlServer根据时段统计数据
  5. JS 面向对象 编程设计
  6. python中列表的操作
  7. sentinel.conf配置
  8. J2ee 巴巴网站制作(二)
  9. CentOS 6.5下安装MySql 5.7
  10. Codevs1992题解
  11. 将类数组对象(array-like object)转化为数组对象(Array object)
  12. centos 6.3 vnc连接—— catalog is not properly configured, attempting to determine an appropriate font p
  13. BaLaBaLa
  14. Thirft框架快速入门
  15. iOS网络基础
  16. checkeds 选中获取tbale表格中某一列td标签中的值
  17. .NET Core多平台开发体验[3]: Linux (Windows Linux子系统)
  18. QTCPSOCKET 客户端已连接 而服务器无响应
  19. http/https与websocket的ws/wss的关系以及通过Nginx的配置
  20. Confluence 6 虚拟文件和文件夹

热门文章

  1. python操作redis详解
  2. Android复习
  3. Linux环境下proc的配置c/c++操作数据库简单示例
  4. 双态运维联盟(BOA)正式成立
  5. 完全用nosql轻松打造千万级数据量的微博系统(转)
  6. window 安装 Twisted 遇到的问题
  7. (2.16)Mysql之SQL基础——函数
  8. 运行HBase应用开发程序产生异常,提示信息包含org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory的解决办法
  9. 使用Ajax向服务器端发送请求
  10. CentOS7系统上部署.net core程序