为什么将可视化调试器附加到我的程序比直接从visual studio运行它更快?



我已经为性能问题挣扎了很长一段时间,我最近意识到我从visual studio运行时获得的性能并不意味着什么。

让我非常惊讶的是,我有非常不同的性能取决于我的调试方式:当我从visual studio运行我的程序时,即使是在发布模式下,它比我直接运行我的程序然后将它附加到visual studio调试器时慢10倍以上。

Visual在运行时将大量测试插入到可执行文件中,当您将其运行到调试器中:

  • 堆损坏检查
  • 堆栈损坏检查
  • Mem泄漏检查
  • 有些甚至更微妙,特别是如果你运行CRT

它通过插入一个取代标准内存分配器库的自定义内存分配器库来实现这一点。所有对new, delete的调用和所有堆栈操作(进入/退出函数)都被监视…

所以,对于性能分析,不要运行到VS调试器

如果你想展开你的代码中发生了什么,你可以看看这里的答案:
Valgrind是否有好的Windows替代品?

特别是第二个答案有有趣的指针。其中一个建议的工具是非常有用:http://www.codersnotes.com/sleepy

即使你在发布模式下构建,VS中的默认运行模式是附加调试器(这总是很慢,因为它插入了一堆检查和监视)。如果你想在VS中测试"正常"运行,使用"Debug>Start Without Debugging"或Ctrl-F5。

最新更新