首页 > 解决方案 > 为什么没有更改检测的 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,我真的不知道如何分析。

SQL Server Profile 的日志截图

希望您有解决方案来改善整体处理时间,谢谢!

标签: sql-serverperformanceentity-framework

解决方案


推荐阅读