gpt4 book ai didi

asp.net - 为什么 DbContext.SaveChanges 在 Debug模式下慢 10 倍

转载 作者:行者123 更新时间:2023-12-03 03:37:01 28 4
gpt4 key购买 nike

谁能解释一下

  1. 为什么 DbContext.SaveChanges 在 Debug模式下的运行速度比生产模式慢约 10 倍?
  2. 有什么办法可以加快速度吗?

在 Debug模式下,我的网页需要 116 秒才能加载,而如果我在不调试的情况下启动项目,则需要 15 秒。

我设置了跟踪语句,并发现在 Debug模式下,116 秒中的约 100 秒花在了我的 DbContext.SaveChanges 方法上。

在没有调试的情况下运行项目在同一部分仅花费了 7 秒。

如果您想了解更多信息,请在评论中告诉我..

项目设置:

  • ASP.NET 网页
  • VS2012
  • SQLServer2012
  • Entity Framework 5.0

其他信息:(如果您需要更多信息,请在评论中告诉我)

  • 通过 SaveChanges 方法累计执行的 sql 查询次数为 20,000 次
  • 生产连接字符串:数据源=PC-DEV;初始目录=aspnet-2013-06-04;集成安全性=True;MultipleActiveResultSets=True;应用程序名称=EntityFrameworkMUE
  • 调试连接字符串:数据源=PC-DEV;初始目录=aspnet-2013-06-04;集成安全性=True;MultipleActiveResultSets=True;应用程序名称=EntityFrameworkMUE
  • 我还体验到使用 LocalDB 作为支持数据库的相同相对性能

更新:

正如 @ruionwriting 所建议的,我对数据库进行了分析,发现无论项目是在 Debug模式还是生产模式下运行,大约 20,000 个 sql 命令花费的时间完全相同。 (每个命令 0 毫秒)。

但是,在 Debug模式下,20,000 个命令之间的平均绝对时间差为 5 毫秒。

与生产模式相比,命令集的平均时间差为 0.3 ms。

这大约是 10 倍的时间性能差异,并且隔离 Entity Framework ,因为在 Debug模式下会花费额外的时间。

有没有办法配置调试构建,以便可以在没有调试标志的情况下引用 EntityFramework?

如果我要通过某种编译器魔法以某种方式恢复性能,那么在调试功能方面我会损失什么?目前我无法进入 Entity Framework 代码,所以我认为我不会错过任何东西。

谢谢!

最佳答案

呼呼!

好的, Debug模式异常缓慢的原因是 Visual Studio 的 Intellitrace 正在记录 Entity Framework 生成的每个 ADO.NET 事件(全部 20, 000 个)。

So Tools-> Options -> IntelliTrace 并取消选中“启用 IntelliTrace” 修复了该问题。

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

感谢大家的建议。

这里的一个部分讨论 Will Intellitrace slow down my app

如何Filter IntelliTrace Events

关于asp.net - 为什么 DbContext.SaveChanges 在 Debug模式下慢 10 倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16925972/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com