sql-server - 为什么没有更改检测的 EF SaveChanges 会占用所有 CPU 和大量时间?
问题描述
我像这样示意性地使用 Entity Framework 6:
MyContext db = new MyContext();
db.Configuration.AutoDetectChangesEnabled = false;
...
//foreach
db.MyEntityCollection.Add(entity);
...
if (i % 1000 == 0)
{
db.SaveChanges();
db.Dispose();
db = new MyContext();
db.Configuration.AutoDetectChangesEnabled = false;
}
问题是指令 SaveChanges 需要超过 1.5 秒来处理一批 1000 个项目,而 0.250 秒需要 100 ...... 250 毫秒需要 100 次插入!CPU 峰值为 100%(在视觉工作室中)!
下面是sql server profiler的日志,每次插入都是在数据库端立即完成的,但有时每次插入之间大约有2-5ms,我真的不知道如何分析。
希望您有解决方案来改善整体处理时间,谢谢!
解决方案
推荐阅读
- git - Docker:在构建时克隆私有 GitHub 存储库
- wixsharp - 用于 .NET Framework 和 MariaDB 的 WixSharp Bootstrapper,具有属性和功能的静默安装,MSI 设置
- ejabberd - Ejabbed 音频/视频通话在不同的网络上不起作用
- java - RestTemplate 的错误请求-> postForObject (Spring Boot)
- wolfram-mathematica - 运动矢量预测或运动矢量差分如何在编码器中提供压缩?
- python - 在python中对每行的正则表达式匹配进行分组
- node.js - react js前端和nodejs后端中的pubnub集成
- python - Python tksheet,如何更改列名
- svelte - Svelte Mapbox-gl-draw:如何将多边形坐标获取到父组件?
- javascript - 更新 Discord Music Bot .js 中嵌入的“正在播放”