我正在将应用程序从 EF1 升级到 EF4.1 我使用“ADO.NET DbContext Generator”模板创建了一个 DbContext 和一组 POCO。
当我查询生成的 DbContext 时,查询的数据库部分需要 4ms 才能执行(使用 EF Profiler 验证)。然后在将结果返回给应用程序之前,上下文需要大约 40 秒(用词:四十!)来完成它所做的任何事情。
EF1 在不到 2 秒的时间内处理相同的查询。
关闭 AutoDetectChanges、LazyLoading 和 ProxyGeneration 可以让我赢得 2-3 秒。
当我使用 AsNoTracking() 扩展方法时,我能够将总执行时间减少到大约 3 秒。
这表明 ChangeTracking 是罪魁祸首。
但是ChangeTracking是我需要的。我必须能够最终保留所有更改,而不必手动选择修改了哪些实体。
有什么想法可以解决该性能问题吗?