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

时间:2013-06-19 14:36:38

标签: c++ performance visual-studio-2012

我一直在努力解决性能问题,我最近意识到从visual studio运行时获得的性能并不意味着什么。

令我感到惊讶的是,根据我的调试方式,我的表现有很大不同:当我从visual studio运行我的程序时,即使在发布模式下,它比我运行程序的速度慢10多倍直接然后将其附加到visual studio调试器。你知道这个差异来自哪里吗?

2 个答案:

答案 0 :(得分:2)

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

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

通过插入取代标准内存分配器库的自定义内存分配器库来实现此目的。 所有对newdelete的调用以及所有堆栈操作(进入/退出函数)都会被监视...

所以是的,对于性能分析,请不要遇到VS调试器。

如果您要展开代码中发生的事情,可以在此处查看答案:
Is there a good Valgrind substitute for Windows?

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

答案 1 :(得分:1)

即使您在发布模式下构建,VS中的默认运行模式也是附加调试器(由于它插入了大量检查和监视,因此总是较慢)。如果要在VS中测试“正常”运行,请使用“Debug> Start Without Debugging”或Ctrl-F5。