Asp.net 为什么DbContext.SaveChanges在调试模式下慢10倍

Asp.net 为什么DbContext.SaveChanges在调试模式下慢10倍,asp.net,performance,entity-framework-5,dbcontext,intellitrace,Asp.net,Performance,Entity Framework 5,Dbcontext,Intellitrace,有人能解释一下吗 为什么DbContext.SaveChanges在调试模式下的运行速度比生产模式慢10倍 我有没有办法加快速度 在调试模式下,我的网页需要116秒才能加载,而在没有调试的情况下启动项目则需要15秒 我已经设置了跟踪语句,并确定在调试模式下,DbContext.SaveChanges方法花费了116秒中的约100秒 在没有调试的情况下运行项目在同一节中只花费7秒 如果你想了解更多信息,请在评论中告诉我 项目设置: ASP.NET网页 VS2012 SQLServer2012 实

有人能解释一下吗

  • 为什么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;综合安全=真实;MultipleActiveResultSets=True;应用程序名称=EntityFrameworkMUE
    • 调试连接字符串:数据源=PC-DEV;初始目录=aspnet-2013-06-04;综合安全=真实;MultipleActiveResultSets=True;应用程序名称=EntityFrameworkMUE
    • 我还体验了与支持数据库LocalDB相同的相对性能
    更新:

    正如@ruionwriting所建议的,我分析了数据库,我发现~20000个sql命令占用的时间与项目在调试或生产模式下运行的时间完全相同。(每个命令0毫秒)

    但是,在调试模式下,20000个命令之间的平均绝对时间差为5ms

    与生产模式相比,这组命令的平均时间差为0.3毫秒

    这是大约10倍的时间性能差异,将实体框架隔离为在调试模式下占用额外时间的部分

    是否有一种方法可以配置调试生成,以便在不使用调试标志的情况下引用EntityFramework

    如果我想通过一些编译器的魔法来恢复性能,那么在调试功能方面我会失去什么呢?目前我无法进入实体框架代码,所以我认为我不会错过任何东西

    谢谢

    EF有多个,众所周知,对于许多其他orm来说,操作可能比预期/期望的orm慢

    (1)在调试时运行速度将始终较慢,(2)在构建后首次运行速度将始终较慢

    所有这些都可能取决于模型的复杂性。试试看。

    好的,调试模式异常缓慢的原因是VisualStudio的Intellitrace正在记录实体框架生成的每个ADO.NET事件(全部20000个)

    因此,工具->选项->IntelliTrace并取消选中“启用IntelliTrace”修复了该问题

    或者也可以通过转到工具->选项->IntelliTrace->IntelliTrace events并取消选中ADO.NET来过滤ADO.NET事件

    谢谢大家的建议

    这里有一节讲的是


    如何

    如评论中所述,给定的答案仅适用于Visual Studio Ultimate

    截至VS2019(可能还有大多数其他版本),解决方案是通过:

    工具>选项>调试>常规

    然后取消选中调试时启用诊断工具

    当然,您将丢失所有诊断位和BAT,但如果您所追求的是实体框架,那么它将大大加快实体框架的速度

    更新:


    上述解决方案对我不再有效。我发现我需要在调试时从同一个选项列表中进一步取消选中“显示运行时间PerfTip”。

    调试时,您的连接字符串是什么样子?@RealityDysfunction在生产和调试模式下用字符串更新了问题。您是否在VS中选中了“仅启用我的代码”?在调试菜单->选项和设置->常规->仅启用我的代码下。也许你没有检查它,VS正在尝试调试EF?@Tombala,即使检查了它,性能仍然很差(这仅适用于Visual Studio Ultimate。社区版中绝对不适用!