什么可以导致调试模式下的慢速运行?

时间:2011-07-01 08:00:20

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

我在应用程序中调试一些非常复杂的集成测试时遇到了问题。测试涉及设置环境,部署数据库和测试代码使用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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

问题可能是由主机上的抗病毒引起的。我在扫描虚拟磁盘方面做了例外,如链接的SuperUser问题所述,性能得到了改进。

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