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