我试图将大约18000个对象添加到我的DBContext中。花了大约5分钟。使用SaveChanges()保存此数据的时间更长。我切换到创建一个普通的List并将我的对象添加到它,然后我使用SqlBulkCopy来保存数据。这花了大约5秒钟。
Add方法做了什么,这需要花费这么长时间?
答案 0 :(得分:1)
所以会发生的是每次添加调用时都会在上下文中执行DetectChanges。这会枚举整个对象图,因此您跟踪的项目越多,每个添加的时间就越长。你可以做一些调整,以便快速完成(我的家用虚拟机可以获得大约1k / s的插入)。
有效地无需调整EF添加性能是O(n ^ 2)
我在下面的文章中详细介绍了这一点:
EntityFramework Performance and AutoDetectChanges
有关EF调整后可以执行的速度的更多信息,请查看此处: