我正在将一个应用程序从EF1升级到EF4.1。我使用“ADO.NET DbContext Generator”模板创建了一个DbContext和一组POCO。
当我查询生成的DbContext时,数据库查询部分需要4ms来执行(通过EF Profiler验证)。然后,上下文大约需要40秒(即FORTY!)才能在返回结果给应用程序之前完成它需要做的事情。
EF1处理相同的查询所需时间少于2秒。
关闭AutoDetectChanges、LazyLoading和ProxyGeneration可以节省2-3秒的时间。
使用AsNoTracking()方法可以将总执行时间减少到约3秒。
这表明ChangeTracking是罪魁祸首。
但是我需要ChangeTracking。我必须能够最终持久化所有更改,而无需手动选择哪些实体已被修改。
有什么办法可以解决这个性能问题吗?
AutoDetectChanges
/ 使用AsNoTracking
,但同时创建跟踪代理(所有属性必须是虚拟的)。我想知道这是否会跟踪更改,但现在无法自行测试。 - Ladislav Mrnka