有人可以解释
- 为什么 DbContext.SaveChanges 在调试模式下的运行速度比生产模式慢 10 倍?
- 有什么办法可以加快速度吗?
在调试模式下,我的网页加载需要 116 秒,而如果我在不调试的情况下启动项目则需要 15 秒。
我已经设置了跟踪语句,并确定在调试模式下,我的 DbContext.SaveChanges 方法花费了 116 秒中的约 100 秒。
在同一部分中仅花费 7 秒的时间在不调试的情况下运行项目。
如果您想了解更多信息,请在评论中告诉我。
项目设置:
- ASP.NET 网页
- VS2012
- SQLServer2012
- 实体框架 5.0
附加信息:(如果您需要更多信息,请在评论中告诉我)
- SaveChanges方法累计sql查询次数为20000
- 生产连接字符串:数据源=PC-DEV;初始目录=aspnet-2013-06-04;集成安全=True;MultipleActiveResultSets=True;应用程序名称=EntityFrameworkMUE
- 调试连接字符串:数据源=PC-DEV;初始目录=aspnet-2013-06-04;集成安全=True;MultipleActiveResultSets=True;应用程序名称=EntityFrameworkMUE
- 我也经历过与 LocalDB 作为后备数据库相同的相对性能
更新:
正如@ruionwriting 所建议的那样,我对数据库进行了分析,我发现无论项目是在调试模式下运行还是在生产模式下运行,大约 20,000 个 sql 命令所花费的时间完全相同。(每个命令 0 毫秒)。
但是,在调试模式下,20,000 条命令之间的平均绝对时间差为 5 毫秒。
与生产模式相比,这组命令的平均时间差为 0.3 毫秒。
这是大约 10 倍的时间性能差异,并将实体框架隔离为在调试模式下花费额外时间的原因。
有没有办法配置调试构建,以便可以在没有调试标志的情况下引用 EntityFramework?
如果我通过某种编译器魔法以某种方式恢复性能,那么在调试能力方面我会失去什么?目前我无法进入实体框架代码,所以我认为我不会错过任何东西。
谢谢!