如果我使用许多而不是一个,EFCore DbContext 会更快吗?为什么?

EFCore DbContext faster if I use many of them instead of one? Why?

上下文:

我正在从 Access 迁移到 SQL Server。这是一个复杂的迁移,而且 运行 相当频繁——所以我将它集成到网站中,这样用户可以在需要时偶尔自己做。

怪异:

所以我最初决定在每个区域的末尾使用一个上下文进行常规 SaveChanges()

当它达到 ~ 60k 插入时,需要很长时间才能保存。

好吧,我想,我会在每次输入后 运行 SaveChanges。花了很长时间。太长了。

好的,所以我决定尝试 SaveChangesAsync,但就是无法正常工作。我愿意给这个区域它自己的 Dbcontext 并让它保存在后台,在结局之前我会等待它。无法让它工作。最初它会抛出一个错误,然后它根本不会保存数据。

好的,下一步就是尝试给这个方法赋予它自己的 DbContext。像梦一样工作。

然后我给了每个方法(总共大约 13 个)它们自己的 DbContext。一切都很快。

所以我的问题是:一个 DbContext 有 13 个 SaveChanges() 调用和 13 个 DbContexts 有 13 个 SaveChanges() 调用有什么区别?

在你 运行 SaveChanges() 之后有什么东西可以清理吗?或者我应该简单地选择许多 DbContext 吗?我只是想避免每次都打开一个新连接以节省那一点时间,但这并不是什么大问题,但我仍然缺乏理解为什么这是案子。有人可以教我吗?

Is there something left behind after you run SaveChanges() that I could clean?

是的。更改跟踪器。默认情况下,DbContext 将保留所有已加载的实体,在这种情况下,加载额外实体和识别已更改实体的成本会逐渐增加。

因此使用多个 DbContext 实例,或在 SaveChanges() 之后分离所有实体,如此处的答案How do I clear tracked entities in entity framework