【发布时间】: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