提升實體框架的資料插入速度
實體框架中的大量資料插入需要最佳化技術。 本文探討了實現快速插入速度的最有效方法。
頻繁SaveChanges()
通話的陷阱
為每筆記錄呼叫 SaveChanges()
是一個主要的效能瓶頸。 為了最大限度地提高速度,請避免這種做法。 考慮以下替代方案:
批次SaveChanges()
:
SaveChanges()
呼叫以同時提交所有插入。 定期SaveChanges()
:
SaveChanges()
。 上下文回收:
DbContext
後的 SaveChanges()
並建立一個新的。這可以防止追蹤實體的累積,隨著時間的推移,這會顯著影響效能。 範例程式碼:
此範例展示了一種高效率的插入策略:
<code class="language-csharp">using (TransactionScope scope = new TransactionScope()) { MyDbContext context = null; try { context = new MyDbContext(); context.Configuration.AutoDetectChangesEnabled = false; int count = 0; foreach (var entityToInsert in someCollectionOfEntitiesToInsert) { ++count; context = AddToContext(context, entityToInsert, count, 100, true); } context.SaveChanges(); } finally { if (context != null) context.Dispose(); } scope.Complete(); }</code>
基準結果:
涉及 560,000 個實體的測試得出了以下結果:
SaveChanges()
:幾個小時(很慢)這些結果表明,具有上下文處理的周期性 SaveChanges()
可提供最佳性能。
以上是如何優化實體框架以進行大量資料插入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!