EF Core 批量写入数据使用整理_EF Core批量插入数据(一)
一、EF Core 批量添加数据 问题详解 AddRange()
问题整理:
1.对于批量写入数据,每次几万条情况 使用 Add() 方法不合理
2.使用AddRange() 每次批量写入数据也要有个数限制,不然也会异常报错
3.批量写入数据,如果Sqlserver 日志文件或者磁盘空间占满也会抛出异常。
4.批量写入需要控制对象的字符数量,字符数量大的写入慢没太多优化空间,看你的磁盘和硬件情况了。
批量数据写入解决方案:
1.写入每条数据字符量尽可能小
2.分段写入,避免内存不足异常
3.使用第三方库,协助增速写入:Z.EntityFramework.Extensions.EFCore
更多参考:
二、批量数据分段写入富文本字符数量较大, 使用AddRange()
如果不分段写入,内存不足会抛出异常
static void Test3()
{// EF Core 批量添加数据 问题详解 AddRange()try{QLSingleContext _context = new QLSingleContext();ArtileNews news = _context.ArtileNews.Find(6);DateTime start = DateTime.Now;List<ArticleInfo> artList = new List<ArticleInfo>();for (int i = 0; i < 50000; i++){ArticleInfo model = new ArticleInfo();model.Title = news.Title;// model.Content = news.Content;model.Content = "内容稍的测试数据";model.ViewCount = 0;model.LastEditTime = DateTime.Now;model.EmpId = 4;artList.Add(model);}Console.WriteLine($"内存组建完成使用{(DateTime.Now - start).TotalSeconds}秒");//1.批量添加的个数是有上限的,根据自己电脑内存而定//2.单条数据字符空间大慢//3.数据太多一次添加太慢_context.ArticleInfos.AddRange(artList);_context.SaveChanges();DateTime end = DateTime.Now;Console.WriteLine($"添加成功了{artList.Count}条数据");Console.WriteLine($"总共使用{(end - start).TotalSeconds}秒");}catch (Exception ex){throw ex;}
}
分段写入代码处理:
//分段插入----此方法不奏效,但可以解决内存不足的bug
static void MyAddRange(QLSingleContext _context, List<ArticleInfo> artList)
{//每次插入2000 条int num = 0;while (true){var temp = artList.Skip(num).Take(10000).ToList();if (temp.Count == 0)break;//使用默认_context.ArticleInfos.AddRange(temp);_context.SaveChanges();num += temp.Count;}
}
插入非富文本,字符量小的数据 5万条:
三、批量查询想增加查询速度,可以取消上下文监听
//查询禁用跟踪
//_context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
// _context.ChangeTracker.AutoDetectChangesEnabled = false;
更多:
EFCore 关联表查询_多表使用整理
Ef Core 使用Entity方式配置外键
SqlServer 大量数据热汇总优化整理
EF Core 批量写入数据使用整理_EF Core批量插入数据(一)相关推荐
- mysql批量写入redis_如何高效地向Redis插入大量的数据(推荐)
最近有个哥们在群里问,有一个日志,里面存的是IP地址(一行一个),如何将这些IP快速导入到Redis中. 我刚开始的建议是Shell+redis客户端. 今天,查看Redis官档,发现文档的首页部分( ...
- mysql如何防止插入重复数据_如何防止MySQL重复插入数据,这篇文章会告诉你
在MySQL进行数据插入操作时,总是会考虑是否会插入重复数据,之前的操作都是先根据主键或者唯一约束条件进行查询,有就进行更新没有就进行插入.代码反复效率低下. 新建表格 CREATETABLE`per ...
- pdo插入mysql数据出错_php中通过pdo插入数据时,sql语句错误?
再次先谢谢各位大佬!! 接下来直接看代码: include 'mysql_ini.php'; $sql_select = "select * from word where word = ? ...
- python写数据到mysql_使用python3 实现插入数据到mysql
我就废话不多说了,直接上代码吧! pip install pymysql import pymysql import pandas as pd conn = pymysql.connect( host ...
- oracle 导入数据时主键丢失,Oracle 插入数据 返回主键
场景:解决getJdbcTemplate往oracle数据库中插入数据返回主键出错有关问题 解决getJdbcTemplate往oracle数据库中插入数据返回主键出错问题 我们使用Spring中的J ...
- mysql添加数据不阻塞_主键表插入数据不提交,外键表插入数据被阻塞
有客户和我说:他在含主外键的表中实验发现,在主表数据未提交,然后在外键表插入该数据数据时,出现外键表hang住现象.我开始以为是不同的会话,根据oracle数据库的一致性原则,应该新会话在外键表中不能 ...
- 存在的hive插入数据_往hive表中插入数据以及导出数据
转载:https://blog.csdn.net/qq_26442553/article/details/80380590 转载:https://blog.csdn.net/weixin_436817 ...
- ajax向数据库中添加数据,用jqueryajax在数据库中插入数据
我有一个带有c#(.net4)代码的表单.在这种形式下,用户填写他的规格并提交. 我想在jquery中使用ajax或post方法来预防blink.i写流程代码. "成功"函数执行, ...
- mysql插入数据变慢的原因_mysql插入数据变慢的原因
最近的项目需要导入大量的数据,插入的过程中还需要边查询边插入.插入的数据量在100w左右.一开始觉得100w的数据量不大,于是就插啊插,吃了个饭,回来一看,在插入了50多w条数据后,每秒就只能插10条 ...
最新文章
- Centos6.5 rpm方式指定目录安装JDK
- yii 验证器类 细说YII验证器
- (三)PHP网页架站
- tiptop 编译运行_tiptop客制规范总结
- 实现java.lang.Runnable接口
- threadpoolexecutor参数_ThreadPoolExecutor的使用
- 逐渐“狗化”!网易云音乐控诉酷狗像素级抄袭,酷狗高管反击...
- 在大厂工作5年的大神,给前端初学者的四大建议,收藏咯
- python configure函数 循环_使用python统计git仓库中频繁修改的热点函数
- java github关联登录_没错,用三方Github做授权登录就是这么简单!(OAuth2.0实战)...
- DPDK QOS1 -- Linux HQOS的框架
- 多媒体封装格式的比较
- Nginx+Tomcat关于Session的管理
- python超链接程序,python超链接
- es java 创建索引_Elasticsearch(ES) 创建索引
- 如何理解图片RGB通道在python(numpy)中的数据构成
- uni-app跨平台开发app,用Hbuilderx打包安卓应用程序到上架google play 完成l流程
- STM32F103ZG单片机解密确保成功 ST芯片解密
- Ubuntu打开WPS ofifice卡顿、无法进行编辑操作解决办法
- C语言3067答案,教师招聘《小学教育心理学》通关试题每日练(2020年03月03日-3067)...
热门文章
- 【java】BeanUtils.populate()的使用
- VS 调试时,不允许修改代码
- 如何在富文本中插入表情,word文档,及数学公式?
- Photoshop序列号
- 设备使用python连接阿里Iot
- ECCV 2020 best paper: RAFT算法解析
- SpringBoot + Spring Cloud +Vue 管理系统前端搭建(二、visual studio code开发前端项目
- vue报错:vue.js:634 [Vue warn]: Cannot find element: #app
- 服务器内存超频性能,服务器内存可以超频么
- 增加PRODUCT_BOOT_JARS及类 提供jar包给应用