我发现各种来源表明,与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。内存被两个队列占用。
我希望不要将其标记为重复,但是我想听听一些有关性能差异的信息。
答案 0 :(得分:3)
我发现各种来源表明,与Visual Studio的调试和发行版本之间几乎没有性能差异。
这很可能是不正确的,或者是错误解释的信息 ...,或者显然是有关另一种语言的信息。如果出现误解,最初的说法可能是调试符号信息对性能没有影响,这是正确的。
无论如何,_DEBUG
(特定于Visual Studio)启用或NDEBUG
(控制断言的标准宏)禁用的额外调试操作的确会产生开销。开销有多大取决于程序的作用。如果花费大量时间等待硬盘驱动器或网络,则可能不是很重要。如果对容器执行大量操作,则开销可能会更大。
在发布版本(而不是在调试版本中)中启用的优化不足,甚至会带来更大的性能差异。
答案 1 :(得分:1)
许多生态系统中的发布版本都关闭了调试信息,并启用了性能优化。后者可能是您所看到的差异的原因。
如果要进行测试,则可以提高调试版本的优化级别,并查看它是否可产生更可比的性能。 Here's a list of optimization level arguments you could use-我的猜测是发布版本正在使用/ O2或/ Ox。