将AutoDetectChangesEnabled设置为false不会影响插入速度

时间:2016-02-12 17:24:03

标签: c# entity-framework

我尝试使用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对插入速度没有影响的原因!

1 个答案:

答案 0 :(得分:1)

我无法解释为什么它在几天前花了100毫秒,我相信你没有添加相同数量的实体。

AutoDetectChangesEnabled无法正常运行。

AutoDetectChangesEnabled = true

  • 添加:尝试在每条记录(非常糟糕)之后检测更改
  • AddRange:尝试在添加每条记录(1次)后检测更改
  • SaveChanges:尝试检测更改(1次)

AutoDetectChangesEnabled = false

  • Add,AddRange& SaveChanges:不检测更改。

因此,当使用AddRange时,AutoDetectChanges几乎没有任何区别。人们习惯于相信插入在禁用时会更快,但只有与“添加”一起使用时才会出现这种情况。

有什么区别是你插入10000个实体,所以你实际上做了 10,000个数据库往返这对性能非常不利,这就是为什么需要70000ms才能保存。

只有BulkInsert库解决了这类问题:

免责声明:我是该项目的所有者Entity Framework Extensions