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