最近,我正在做一些简单的EF工作。非常简单,
第一,
List<Book> books = entity.Books.WHERE(c=>c.processed==false)ToList();
then
foreach(var book in books)
{
//DoSomelogic, update some properties,
book.ISBN = "ISBN " + randomNumber();
book.processed = true;
entity.saveChanges(book)
}
我将
entity.saveChanges
放入foreach
之内,因为它是一个很大的列表,大约有100k条记录,如果对该记录进行了正确处理,则标记该记录,并将book.processed = true设置为true,如果该进程被异常中断,则下次,我不必再次处理这些好的记录。一切对我来说似乎还可以。处理数百条记录时速度很快。然后,当我们移至10万条记录时,entity.saveChanges非常慢。每条记录大约1-3秒。然后,我们保留实体模型,但将
entity.saveChanges
替换为经典SqlHelper.ExecuteNonQuery("update_book", sqlparams)
。而且速度非常快。谁能告诉我为什么 Entity Framework 流程这么慢?而且,如果我仍然想使用entity.saveChanges,那么提高性能的最佳方法是什么?
谢谢
最佳答案
在执行插入操作之前,请关闭更改跟踪。这将显着提高您的性能(数量级)。将SaveChanges()
放入循环之外也将有所帮助,但是关闭更改跟踪将有更多帮助。
using (var context = new CustomerContext())
{
context.Configuration.AutoDetectChangesEnabled = false;
// A loop to add all your new entities
context.SaveChanges();
}
有关更多信息,请参见this page。
关于entity-framework - Entity Framework 性能问题,saveChanges非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21272763/