当然,Debug 构建比 Release 构建慢。但是,当我在 Release模式下构建时,应用程序从资源管理器手动启动时的性能比从 Visual Studio 中启动时要好得多。例如,在我的项目中,文件系统访问需要大约 10 倍的时间。由于是同一个可执行文件,我认为它应该运行相同的指令。
为什么从 Visual Studio 内部启动的 Release 构建如此缓慢?我怎样才能获得完整的原生速度?
最佳答案
我认为区别在于堆。
MSDN说:调试器创建的进程(也称为派生进程)的行为与调试器未创建的进程略有不同。 调试器创建的进程不使用标准堆 API,而是使用特殊的调试堆。您可以通过使用 _NO_DEBUG_HEAP 环境变量或 -hd 命令行选项强制生成的进程使用标准堆而不是调试堆。
当使用调试堆时,它会在分配或释放时检查堆的完整性,因此会影响性能。
此外,它会禁用 low-fragmentation heap何时启用调试堆。如果您直接运行您的 exe,系统会根据需要使用低碎片堆 (LFH) 来为 Windows Vista 之后的内存分配请求提供服务,如果您的应用程序有大量分配和空闲,LFH 可以大大提高应用程序性能。
我很久以前尝试在 Window XP 下提高应用程序性能时遇到了同样的问题,而 LFH 在 XP 上默认是禁用的。我在我的应用程序中添加了启用 LFH 的代码,然后我发现该代码仅在应用程序从资源管理器启动时有效,在 VS 中调试启动时无效。
关于c++ - 在 Visual Studio 中发布版本仍然更慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24037370/