我正在将应用程序从EF1升级到EF4.1 我使用“ADO.NET DbContext Generator”模板创建了一个DbContext和一组POCO。DbContext ChangeTracking杀死性能?
当我查询生成的DbContext时,查询的数据库部分需要4ms才能执行(使用EF Profiler进行验证)。然后在将结果返回给应用程序之前,需要大约40秒的时间(用词:FORTY!)来完成它所做的任何事情。
EF1在少于2秒内处理相同的查询。
关闭AutoDetectChanges,LazyLoading和ProxyGeneration赢得我2-3秒。
当我使用AsNoTracking()扩展方法时,我能够将总执行时间减少到大约3秒。
这表明ChangeTracking是罪魁祸首。
但ChangeTracking是我所需要的。我必须能够最终坚持所有的改变,而不必亲自挑选哪些实体被修改。
任何想法如何解决性能问题?
在这里讨论了几次。它看起来像EFv4.1中的一个错误 – 2011-05-12 07:46:35
当我使用EF4.0和“ADO.NET POCO实体生成器”模板时,情况更糟糕。然后它需要超过80秒,直到我有一些结果。所以这个错误在以前的版本中变得更加严重,MS无法在EF4.1中正确地修复它? – 2011-05-12 08:05:30
您可以尝试关闭'AutoDetectChanges' /使用'AsNoTracking',但同时创建跟踪代理(所有属性都必须是虚拟的)。我想知道这个曲目是否会改变,现在我无法对它进行测试。 – 2011-05-12 08:12:59