我尝试使用EntityFramework 6插入10000行。为了加快进程,我禁用了AutoDetectChanges
using (var db = new TestDbContext())
{
try
{
db.Configuration.AutoDetectChangesEnabled = true;
db.Adresses.AddRange(adresesModel);
db.SaveChanges();
}
finally
{
db.Configuration.AutoDetectChangesEnabled = true;
}
}
前几天这个过程需要大约100毫秒,但是现在我禁用了AutoDetectChanges它需要大约70000毫秒 启用AutoDetectChanges后,它还需要~70000 ms
我找不到禁用AutoDetectChanges对插入速度没有影响的原因!
答案 0 :(得分:1)
我无法解释为什么它在几天前花了100毫秒,我相信你没有添加相同数量的实体。
AutoDetectChangesEnabled无法正常运行。
AutoDetectChangesEnabled = true
AutoDetectChangesEnabled = false
因此,当使用AddRange时,AutoDetectChanges几乎没有任何区别。人们习惯于相信插入在禁用时会更快,但只有与“添加”一起使用时才会出现这种情况。
有什么区别是你插入10000个实体,所以你实际上做了 10,000个数据库往返这对性能非常不利,这就是为什么需要70000ms才能保存。
只有BulkInsert库解决了这类问题:
免责声明:我是该项目的所有者Entity Framework Extensions