【发布时间】:2011-10-26 05:38:04
【问题描述】:
8 个月前在这里讨论了相同的主题:How do I speed up DbSet.Add()?。除了使用我们无法接受的 SqlBulkCopy 之外,没有提出任何解决方案。我决定再次提出它,希望围绕这个问题可能会有新的想法和想法,并提出其他解决方法。至少我只是好奇为什么这个操作需要这么长时间才能运行。
好吧,问题是:我必须将 30K 实体更新到数据库中(EF 4.1,POCO)。实体类型非常简单,包含整数 Id + 其他 4 个整数属性,与其他类型没有关系。 2个案例:
-
所有这些都是新记录。在 Cntx.Configuration.AutoDetectChangesEnabled=false 的情况下,每个实体一个一个地运行 context.Entities.Add(entity) 需要 90 秒(真值使其永远运行)。然后 SaveChanges 只需一秒钟。其他方法:像这样将其附加到上下文需要相同的 90 秒:
Cntx.Entities.Attach(entity); Cntx.Entry(entity).State = EntityState.Added; -
所有这些都是现有的记录,但有一些变化。在这种情况下,只需几毫秒即可将其附加到现有数据上下文,如下所示:
Cntx.Entities.Attach(entity); Cntx.Entry(entity).State = EntityState.Modified;看到区别了吗?
Add 方法的幕后原因是什么让它运行得如此缓慢?
【问题讨论】:
-
请将您的更新作为答案。
-
我试过了,但我做不到,需要 100 个声望点(另外 9 个)才能做出自我回答。
-
赞成你的问题,现在你有 101 个代表 :)
-
谢谢 :) 我已经把它作为答案
-
你试过rudi的
Cntx.Configuration.AutoDetectChangesEnabled = false;方法了吗?
标签: performance entity-framework entity-framework-4.1 poco