在EF DBContext Add方法的引擎下发生了什么?

时间:2012-12-07 14:49:22

标签: entity-framework

我试图将大约18000个对象添加到我的DBContext中。花了大约5分钟。使用SaveChanges()保存此数据的时间更长。我切换到创建一个普通的List并将我的对象添加到它,然后我使用SqlBulkCopy来保存数据。这花了大约5秒钟。

Add方法做了什么,这需要花费这么长时间?

1 个答案:

答案 0 :(得分:1)

所以会发生的是每次添加调用时都会在上下文中执行DetectChanges。这会枚举整个对象图,因此您跟踪的项目越多,每个添加的时间就越长。你可以做一些调整,以便快速完成(我的家用虚拟机可以获得大约1k / s的插入)。

有效地无需调整EF添加性能是O(n ^ 2)

我在下面的文章中详细介绍了这一点:

EntityFramework Performance and AutoDetectChanges

有关EF调整后可以执行的速度的更多信息,请查看此处:

Entity Framework Comparative Performance