提升实体框架的数据插入速度
实体框架中的大量数据插入需要优化技术。 本文探讨了实现快速插入速度的最有效方法。
频繁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中文网其他相关文章!