基本上,我有一个 native C++ 应用程序,它在代码开发期间显然不时崩溃。修复了一些错误后,它运行起来相当流畅。但是,我注意到一个相当奇怪的行为,这让我很困惑。
这是一个基于 CMake 的项目,我可以选择将应用程序打包成一个 zip 文件。当我从新提取的 zip 运行可执行文件时 - 应用程序运行正常(并且性能很高)。但是,比如说,如果它崩溃了几次——下次启动时行为是一样的,但一切都运行得非常慢。我的测试用例(尽管是手动的)非常简单,我可以轻松地重复它。
一旦应用程序变慢,我所要做的就是重命名应用程序所在的文件夹,性能就会再次提升。直到它崩溃了几次。
显然,一旦我摆脱了崩溃,这就不是问题了。但是,在我看来,一旦系统(Win8.1 x64)检测到持续崩溃,它就会以某种不同的模式(?)运行它。看起来我从 IDE (MSVS2013) 运行的应用程序收到了这个“惩罚”。因此即使在 Release模式下它运行起来也非常慢,更不用说调试了。
所以我有几个问题要问社区。首先,你有没有观察到这样的行为?其次,减速的原因是否确实是在应用程序崩溃时存储的一些系统范围的信息?最后,您知道如何解决它吗?
注意:我可能会将源文件夹移动到不同的位置,但这需要相当长的重建步骤。而且,我只是对发生了什么感到好奇。此外,系统重启和在同一文件夹中完全重建也无济于事。
一些上下文:该应用程序使用 Qt4(也称为 Qt 插件系统)、MITK、ITK、VTK、CTK、OpenCASCADE、glew 和相关库,所有这些都是从 native 上的源代码构建的。
干杯, 罗斯季斯拉夫。
最佳答案
问了这个问题差不多一年后,问题“ self 解决”了,我想我找到了答案并决定把它贴在这里以防有人遇到类似的问题。
在我看来,我的应用程序在几次崩溃后被系统放入了容错堆 (FTH)。有关 FTH 的更多信息,请访问 MSDN。 .在调试特别严重的崩溃时,在开发人员机器上禁用 FTH(至少暂时)可能是有意义的。
关于C++ 应用程序在崩溃后运行缓慢(MSVS、Win8 x64),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23392191/