代码
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个整型)
通过包含大量需要的内容,我减少了对数据库的调用。但我发现不是过程,而是省钱花了这么长时间:
问题
更新记录中的所有值与删除当前值并插入新值在性能上是否存在差异
我怎样才能更好地将其保存到数据库中?比如10分钟而不是160分钟?
发布于 2013-04-03 01:23:58
Entity Framework不太适合批量更新。
我也处于同样的情况,最终重写了我的批量更新逻辑,以便在存储过程中使用ADO.Net。对于我的特定用例,性能提升约为10倍。
另一种选择可能是SqlBulkCopy,这取决于您的实际情况。
发布于 2013-04-03 01:25:15
有一些技巧你可以使用,比如每100个操作才提交一次。
但是,对于从ORM执行速度太慢的数据库操作,我总是不得不为其编写存储过程。
https://stackoverflow.com/questions/15770262
复制相似问题