2

我正在通过 EF4 将文本文件读入数据库。该文件中有超过 600,000 行,因此速度很重要。

如果我在创建每个新实体对象后调用 SaveChanges,则此过程大约需要 15 分钟。如果我在创建 1024 个对象后调用 SaveChanges,那么它会缩短到 4 分钟。

1024 是我选择的任意数字,它没有参考点。

但是,我想知道在调用 SaveChanges 之前是否有最佳数量的对象可以加载到我的实体集中?如果是这样......你是如何解决的(除了反复试验)?

4

2 回答 2

4

这实际上是一个非常有趣的问题,当上下文变得非常大时,EF 变得慢得多。您实际上可以通过在批量插入期间禁用 AutoDetectChanges 来解决这个问题并显着提高性能。然而,一般而言,您可以在 SQL 事务中包含的项目越多越好。

在此处查看我关于 EF 性能的帖子http://blog.staticvoid.co.nz/2012/03/entity-framework-comparative.html,以及我在此处关于如何禁用 AutoDetectChanges 改进这一点的帖子http://blog。 staticvoid.co.nz/2012/05/entityframework-performance-and.html,这些也可以让您很好地了解批量大小如何影响性能。

于 2012-05-27T12:31:52.857 回答
1

分析应用程序并查看您选择的两个应用程序花费的时间。这应该会给你一些很好的数字来推断。

就我个人而言,我必须询问您为什么使用 EF 来加载文本文件 - 对于使用 BCP 或直接 SQLCommands 应该很容易将其触发到数据库中的东西来说,这似乎是一种严重的过度杀伤力。

于 2012-05-27T11:46:06.477 回答