Entity Framework のデータ挿入速度の向上
Entity Framework に大量のデータを挿入するには、最適化された技術が必要です。 この記事では、挿入速度を高速化するための最も効率的な方法を検討します。
頻繁な 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()
が最高のパフォーマンスを提供することを示しています。
以上が大量のデータ挿入のために Entity Framework を最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。