为什么将可视化调试器附加到我的程序比直接从visual studio运行它更快?
Why is it faster to attach the visual debugger to my program than to run it directly from 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。
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 试图在visual studio上用C++创建一个桌面应用程序
- 如何在MS Visual Studio 2019中运行QT UI
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- Visual Studio Code - C++ Debugger 無法啟動
- Visual Studio 2019:插入多个C++风格的单行注释
- Visual Studio Code "undefined reference to `WinMain@16'"
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- Visual Studio中的函数声明和函数定义问题
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- Visual Studio mkl_link_tool.exe链接错误
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 不同的Visual Studio版本中缺少.dll
- 用Visual Studio在C++中嵌入Julia
- Visual Studio 2017循环自动向量化问题
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- Visual Studio在尝试读取resource.txt文件时崩溃
- Visual Studio 2017 不允许我创建 C++ 专用模板