为什么在启用分析时我的程序运行得更快?

Ste*_*art 16 c++

我有一个运行速度非常慢的程序(即使在发布时也需要20秒)所以,想要修复它,我尝试使用Visual Studio内置的分析器.但是,当我运行启用了性能分析的程序时,它会在不到一秒的时间内完成.这使得很难找到瓶颈.我会发布代码,但它很长.有没有明显的或不那么明显的原因导致这种情况发生?

编辑:好的,所以我把问题缩小到一堆free()调用.当我将它们注释掉时,程序运行的时间与启用性能分析的时间相同.但现在我有内存泄漏: - /

小智 25

原因是当您在Visual Studio中运行应用程序时,调试器将附加到它.使用分析器运行它时,不会附加调试器.

如果按F5运行程序,即使使用Release版本,调试器仍会附加.

如果您尝试单独运行.exe,或通过IDE使用"Debug> Start Without Debugging"运行程序(或者只需按Ctrl + F5),应用程序的运行速度应与分析器的运行速度一样快.


Dre*_*ann 10

这听起来很像Heisenbug.

他们真的发生了,他们可能会发现痛苦.

根据我的经验,您最好的解决方案是改变您的分析方式 - 可能有几种方式 - 直到错误消失.

使用不同的分析器.尝试添加计时代码而不是使用探查器.


Joh*_*ler 5

打开探查器将最终移动你的代码(一点点),这可能掩盖了问题.

hiesenbugs最常见的原因是单元化变量,第二个最常见的原因是在释放后使用内存().由于您的免费似乎可以修复它,您可能会考虑寻找延迟引用,但如果我是您,我仍会首先查找未初始化的变量.