【发布时间】:2014-01-22 02:00:00
【问题描述】:
最近,我正在做一些简单的 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,如果进程被中断例外的话,下次我就不用再处理这些好记录了。
对我来说一切都很好。处理数百条记录时速度很快。然后当我们移动到 10 万条记录时, entity.saveChanges 非常非常慢。每条记录大约 1-3 秒。然后我们保留实体模型,但将entity.saveChanges 替换为经典的SqlHelper.ExecuteNonQuery("update_book", sqlparams)。而且速度非常快。
谁能告诉我为什么实体框架处理这么慢?如果我仍然想使用 entity.saveChanges,那么提高性能的最佳方法是什么?
谢谢
【问题讨论】:
标签: entity-framework