我有一个中型原生 C++ 应用程序。当我从 Visual Studio (2008) 中运行它时,它的运行速度比从 Visual Studio 外部运行时慢大约 10 倍。这适用于 Debug 和 Release 版本,并且在我以Start Debugging
(F5) 和Start Without Debugging
(Ctrl+F5) 运行应用程序时都会发生。
换句话说:在没有调试器的情况下在 Visual Studio 中运行发布版本比从命令提示符(或 Windows 资源管理器)运行相同的可执行文件慢 10 倍。
我尝试过的事情:
- 仔细检查没有设置断点、跟踪点、异常调试等。没有。
- 在应用程序的 VS 调试属性中设置
_NO_DEBUG_HEAP=1
。没有效果。 - 设置
cmd /c set PATH
为由 Ctrl+F5 而不是应用程序本身运行,并将其与PATH
VS 外部可用的情况进行比较。没有不同。 - 在 exe 上运行 DependencyWalker,并将其与运行应用程序时加载的 Visual Studio 列出的库进行比较。没有不同。
- 谷歌搜索和搜索,但这只是提出了上述想法或处理了 F5 与 Ctrl+F5 的差异(在我的情况下没有)。
我已经没有想法了,如果有任何关于在哪里寻找或尝试什么的指示,我将不胜感激。
该应用程序使用 OpenGL 和 Qt,并且做相当普通的事情:没有加载/卸载 DLL,仅在启动时输入文件(3D 模型和着色器),没有文件输出,很少的第 3 方库(除了 Qt,所有这些都是静态链接的) .
雪上加霜,我只是在最近对应用程序进行内部重构后才开始遇到这种行为。在此之前,它在 VS 内外都运行良好。这次重构主要是把一些功能提取到一个新创建的基类中(即把A > B
继承改成A > C > B
继承,涉及的虚调用很少),并new[]
用 s 替换了一些调用std::vector
。
编辑
我又尝试了一件事:在应用程序的调试属性中,将目标设置为cmd /k
,然后执行 Ctrl+F5 以启动cmd
并从该命令行运行应用程序。这样,它以正常速度运行(即不存在 10 倍减速)。当然,这对于调试毫无用处,但出于完整性的考虑,我想提一下。
编辑 2
我找到了:这是对工作目录的奇怪依赖。如果从 .vcproj 所在的目录开始(VS 通常使用 F5 和 Ctrl+F5),目录中的相对路径将存在,并且调试输出(我忘记了它的存在)成功,从而减慢了运行速度。从任何其他目录执行会导致输出失败,从而加快执行速度。
我向所有为此花费时间的人道歉。投票结束。