最近,我正在做一些簡單的EF工作。很簡單, 第一,實體框架性能問題,saveChanges很慢
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 =真,如果進程被異常打斷,那麼下一次,我不必再處理這些好記錄。
一切似乎都對我好。處理數百條記錄時速度很快。然後當我們移動到10萬條記錄時,entity.saveChanges非常慢。每個記錄大約1-3秒。然後我們保留實體模型,但用經典SqlHelper.ExecuteNonQuery("update_book", sqlparams)
替換entity.saveChanges
。而且速度非常快。
誰能告訴我爲什麼實體框架過程那麼慢?如果我仍然想使用entity.saveChanges,那麼提高性能的最佳方法是什麼?
謝謝
是的,固定的,謝謝:) – Steve
什麼是將此關閉的負面影響? – RayLoveless
@RayLoveless'SaveChanges'將提交每個插入實體中的每個字段到數據庫。查詢將會更長,但可以說比運行'DetectChanges'還要快,特別是對於批量插入。 – Gusdor