0

代码

foreach (var item in _context.Duiven.
                .Include(p => p.Duivenmelker.VoedselInstelling)
                .Include(p => p.VoedselHistoriek)
                .Include(p => p.Duivenmelker.Personeel)
                .Include("Ziektes.DuifZiekte")
                .ToList() // 25.000)
            {
                item.FoodHistory();
                item.HealthSimulation();
                item.DiseaseSimulation(diseaseTypes);
                item.CureSimulation(_context);
                item.DeathSimulation();
                item.Feed();
}

_context.SaveChanges()

问题

上面的代码通过 aprox 循环。25000 项。它更新这些对象上的各种东西(这个过程大约需要10分钟)问题在于将所有这些更改保存到数据库中,这需要将近2个小时。

它可能会一一更新(sql)每个更改?(这是 sql azure)该过程还包括删除 25000 条记录和插入 25000 条新记录(4 个整数)

我通过包含很多需要的内容减少了对数据库的调用。但我发现这不是过程,而是需要这么长时间的节省:S

问题

[更新记录中的所有值]和[删除当前值并插入新值]之间的性能有区别吗?

我该如何改进将其保存到数据库中?像 10 分钟而不是 160m ?

4

2 回答 2

3

实体框架不太适合批量更新。

我遇到了同样的情况,最终重写了我的批量更新逻辑以将 ADO.Net 与存储过程一起使用。对于我的特定用例,性能增益约为 10 倍。

根据您的具体情况,另一种选择可能是SqlBulkCopy 。

于 2013-04-02T17:23:58.240 回答
0

您可以使用一些技巧,例如每 100 次左右的操作才提交一次。

但是,我总是不得不回退到为从 ORM 执行太慢的数据库操作编写存储过程。

于 2013-04-02T17:25:14.623 回答