我一直在處理這個問題2天,我找不到解決方案。改進實體框架插入
using (TaxablePersonContext context = new TaxablePersonContext(this.ConnectionString))
{
context.Configuration.AutoDetectChangesEnabled = false;
foreach(TaxablePerson p in persons) // Persons has always size 1000
{
// TaxablePerson has some other properties e.g. Name, VatId, Street,...
p.RecCreatedBy = "application name";
p.RecCreatedOn = this.SynchronizationStartDateTime;
p.RecModifiedBy = "application name";
p.RecModifiedOn = this.SynchronizationStartDateTime;
p.RecSyncDate = this.SynchronizationStartDateTime;
p.RecActive = true;
}
DateTime start1 = DateTime.Now;
context.TaxablePersons.AddRange(persons);
TimeSpan end1 = DateTime.Now.Subtract(start1);
DateTime start2 = DateTime.Now;
context.SaveChanges();
TimeSpan end2 = DateTime.Now.Subtract(start1);
}
我花了將近10秒來插入1000條記錄和98秒來在SQL Server中插入10.000記錄。您能否請告知如何改進實體框架插入性能。我閱讀這篇文章Fastest Way of Inserting in Entity Framework,幷包括本文中提到的技巧,但仍插入非常緩慢。我需要插入260.000條記錄,需要52分鐘。我插入1000個批次,上面的代碼演示。數據從文件中讀取,當我打1000個記錄時,我會與數據庫進行同步。我還可以做些什麼?有些人提到使用時設置context.Configuration.AutoDetectChangesEnabled = false;性能從幾分鐘提高到接近幾秒。我錯過了什麼?我正在使用實體框架6.1.3。
您還應該使用: context.Configuration.ValidateOnSaveEnabled = false; –
@ K.J。謝謝你的設置,但它沒有什麼區別。 – broadband
在'using':'context.Database.Log = s => Debug.Write(s);'後面添加這段代碼''並在'using'結尾檢查VS中的Output窗口。可能你會看到奇怪的東西 – Szer