【问题标题】:What can cause slow run at debug mode?什么会导致在调试模式下运行缓慢?
【发布时间】:2011-07-01 08:00:19
【问题描述】:

我在调试我们的应用程序中的一些非常复杂的集成测试时遇到了问题。测试涉及设置环境、部署数据库和测试代码使用大量数据库查询与 NHibernate、Spring.NET(DI、AoP、事务,...)、多线程和与集成平台通信时的一些网络活动(包括对本机的调用dll)。

我有两个使用相同代码库的系统:

笔记本

  • i7(2 核,HT = 4 个逻辑 CPU),4GB RAM,5400 rpm 磁盘,Win 7 64 位

虚拟机(Oracle Virtual Box)

  • 主机:i7(4 核,HT = 8 个逻辑 CPU,12 GB RAM,系统从 SSD 运行,虚拟机从 7200 rpm 磁盘,Win 7 64 位)
  • 虚拟机:分配 4 个内核,分配 8 GB RAM,Win 2008 R2 Enterprise(64 位)
  • 用于网络通信的 VPN
  • 主机上没有运行其他虚拟机

现在,如果我在不调试的情况下运行测试,则执行时间几乎相同,为 12-15 秒(因此网络通信不应该是问题),但如果我在调试的情况下运行测试,则在笔记本电脑上需要不到 2 分钟,但更多在虚拟机上 4 分钟(我需要在测试结束时调试一些代码)。我希望虚拟机的性能会比笔记本电脑好,但速度要慢两倍以上!

测试代码使用 NUnit、Spring.NET 测试基类,它从 VS 2010 Ultimate + Resharper 测试会话运行。

这是概念验证代码,因此单元测试覆盖率很低。我编写了一些额外的单元测试来单独测试尽可能多的代码,但仍然有些部分没有以单元测试容易覆盖的方式编写。

旁注:这个概念验证的重点是识别这些部分以进行进一步重构,而不是现在重构代码。

什么会导致速度差异?

编辑:

当我写这个问题时,我想到了与编程本身无关的其他原因 - 我输入了separate question on SuperUser

【问题讨论】:

  • 有点过于本地化,但Activator.CreateInstance 可能是罪魁祸首。

标签: .net performance visual-studio-2010 debugging integration-testing


【解决方案1】:

我过去遇到过这样的问题,该问题与第三方库的错误使用有关,这会导致竞争条件和超时。启用所有类型的异常帮助我找出测试挂起的位置。尝试在 Visual Studio -> Debug -> Exceptions 中启用所有异常并再次运行测试

【讨论】:

    【解决方案2】:

    问题可能是由主机上的杀毒软件引起的。如链接的超级用户问题中所述,我对扫描虚拟磁盘进行了例外处理,并且性能得到了改进。

    另一个性能提升是通过使用Debugger 类(仅用于修复问题)来按需附加到调试器,而不是运行附加到调试器的整个测试。

    【讨论】:

      猜你喜欢
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-26
      • 2019-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多