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

Ken*_*nci 6 entity-framework

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

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

Not*_*ple 2

因此,每次添加调用时都会在上下文中执行 DetectChanges。这会枚举整个对象图,因此您跟踪的项目越多,每个单独添加所需的时间就越长。您还可以围绕此进行大量调整,以加快速度(我在我的家庭虚拟机上获得大约 1k/s 的插入速度)。

无需调整 EF 即可有效添加性能为 O(n^2)

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

EntityFramework 性能和 AutoDetectChanges

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

实体框架性能比较