性能差异调试与发布

时间:2019-07-16 16:34:23

标签: c++ performance-testing

我发现各种来源表明,与Visual Studio的调试和发行版本之间几乎没有性能差异。

我正在使用Visual Studio 2015,并编写了一个事件驱动的状态机框架。在我进行了第一次性能测试后,a被撞了,因为该框架每秒仅进行约13.000次状态切换。

但是当我将其编译为发行版时,我每秒获得150万个状态切换。那对我来说是一个巨大的增长,但是我无法解释它的来源。

可悲的是,我不能共享我的代码,因为它属于我的公司。

但是我发现,这样的for循环在版本Version中运行得更快。

for (auto i = 0; i < 2000000; i++)      
        my_machine.PushEvent(event);

此外,发布版本的备忘录使用量从255 MB减少到67MB。内存被两个队列占用。

我希望不要将其标记为重复,但是我想听听一些有关性能差异的信息。

2 个答案:

答案 0 :(得分:3)

  

我发现各种来源表明,与Visual Studio的调试和发行版本之间几乎没有性能差异。

这很可能是不正确的,或者是错误解释的信息 ...,或者显然是有关另一种语言的信息。如果出现误解,最初的说法可能是调试符号信息对性能没有影响,这是正确的。

无论如何,_DEBUG(特定于Visual Studio)启用或NDEBUG(控制断言的标准宏)禁用的额外调试操作的确会产生开销。开销有多大取决于程序的作用。如果花费大量时间等待硬盘驱动器或网络,则可能不是很重要。如果对容器执行大量操作,则开销可能会更大。

在发布版本(而不是在调试版本中)中启用的优化不足,甚至会带来更大的性能差异。

答案 1 :(得分:1)

许多生态系统中的发布版本都关闭了调试信息,并启用了性能优化。后者可能是您所看到的差异的原因。

如果要进行测试,则可以提高调试版本的优化级别,并查看它是否可产生更可比的性能。 Here's a list of optimization level arguments you could use-我的猜测是发布版本正在使用/ O2或/ Ox。