如何在EF4中找出SaveChanges的最佳尺寸?

时间:2012-05-27 11:40:41

标签: c# optimization entity-framework-4 savechanges

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

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

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

但是,我想知道在调用SaveChanges之前是否有一个最佳数量的对象加载到我的实体集中? 如果是这样的话......你是如何解决的(试验和错误除外)?

2 个答案:

答案 0 :(得分: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,这些也可以让您了解批量大小如何影响效果。

答案 1 :(得分:1)

对应用程序进行概要分析,看看在选择的两个人身上花了多少时间。这应该可以为你提供一些好的数字来推断。

就我个人而言,我必须查询为什么使用EF来加载文本文件 - 对于那些应该很容易使用BCP或直接SQLCommands来触发数据库的内容来说,这似乎是一种过度杀伤。