性能差异调试与发布
Performance difference Debug vs Release
我发现各种来源表明 Visual Studio 的调试版和发行版的性能差异应该很小甚至没有。
我正在使用 Visual Studio 2015 并编写了一个事件驱动状态机框架。在我进行了第一次性能测试之后,由于该框架每秒仅进行大约 13.000 次状态切换,所以出现了问题。
但是当我将它编译为发布版本时,我每秒得到了 150 万个状态切换。这对我来说是一个巨大的增长,但我无法解释这是从哪里来的。
可悲的是,我不能分享我的代码,因为它属于我的公司。
但我发现像这样的 for-loop 在发布版本中运行得更快。
for (auto i = 0; i < 2000000; i++)
my_machine.PushEvent(event);
此外,发行版的内存使用量从 255 MB 左右下降到 67 MB。内存被两个队列占用。
我希望这不会被标记为重复,但我想听听一些关于性能差异的意见。
许多生态系统中的发布版本都关闭了调试信息并开启了性能优化。后者很可能是您看到的差异的原因。
如果您想对此进行测试,可以提高调试版本的优化级别,看看它是否会产生更具可比性的性能。 Here's a list of optimization level arguments you could use - 我猜发布版本使用的是 /O2 或 /Ox。
I found various sources that there should be little to no performance difference with the debug and release version of Visual Studio.
这很可能是不正确的或被误解的信息...或者,显然是关于另一种语言的信息。以防误解,原来的说法可能是调试符号信息对性能没有影响,这是正确的。
无论如何,由 _DEBUG
(Visual studio 特定)启用或由 NDEBUG
(控制断言的标准宏)禁用的额外调试操作确实有开销。开销有多大取决于程序的作用。如果它大部分时间都在等待硬盘驱动器或网络,那么可能意义不大。如果它对容器进行大量操作,那么开销可能会更大。
更显着的性能差异将来自缺乏优化,这些优化在发布版本中启用,而不是在调试版本中启用。
我发现各种来源表明 Visual Studio 的调试版和发行版的性能差异应该很小甚至没有。
我正在使用 Visual Studio 2015 并编写了一个事件驱动状态机框架。在我进行了第一次性能测试之后,由于该框架每秒仅进行大约 13.000 次状态切换,所以出现了问题。
但是当我将它编译为发布版本时,我每秒得到了 150 万个状态切换。这对我来说是一个巨大的增长,但我无法解释这是从哪里来的。
可悲的是,我不能分享我的代码,因为它属于我的公司。
但我发现像这样的 for-loop 在发布版本中运行得更快。
for (auto i = 0; i < 2000000; i++)
my_machine.PushEvent(event);
此外,发行版的内存使用量从 255 MB 左右下降到 67 MB。内存被两个队列占用。
我希望这不会被标记为重复,但我想听听一些关于性能差异的意见。
许多生态系统中的发布版本都关闭了调试信息并开启了性能优化。后者很可能是您看到的差异的原因。
如果您想对此进行测试,可以提高调试版本的优化级别,看看它是否会产生更具可比性的性能。 Here's a list of optimization level arguments you could use - 我猜发布版本使用的是 /O2 或 /Ox。
I found various sources that there should be little to no performance difference with the debug and release version of Visual Studio.
这很可能是不正确的或被误解的信息...或者,显然是关于另一种语言的信息。以防误解,原来的说法可能是调试符号信息对性能没有影响,这是正确的。
无论如何,由 _DEBUG
(Visual studio 特定)启用或由 NDEBUG
(控制断言的标准宏)禁用的额外调试操作确实有开销。开销有多大取决于程序的作用。如果它大部分时间都在等待硬盘驱动器或网络,那么可能意义不大。如果它对容器进行大量操作,那么开销可能会更大。
更显着的性能差异将来自缺乏优化,这些优化在发布版本中启用,而不是在调试版本中启用。