当然,Debug版本比Release版本慢。但是,当我在发布模式下构建时,应用程序在从资源管理器中手动启动时比在Visual Studio中启动时执行得更好。例如,文件系统访问在我的项目中需要大约10倍。由于它是相同的可执行文件,我认为它应该运行相同的指令。
为什么在Visual Studio中启动Release版本如此之慢?我怎样才能获得完整的原生速度?
答案 0 :(得分:5)
我认为不同之处在于堆。
MSDN说:调试器创建的进程(也称为生成进程)的行为与调试器未创建的进程略有不同。 调试器创建的进程使用特殊的调试堆,而不是使用标准堆API。您可以使用_NO_DEBUG_HEAP环境变量或-hd命令行选项强制生成的进程使用标准堆而不是调试堆。
使用调试堆时,它会在分配或释放时检查堆的完整性,因此会影响性能。
此外,它在启用调试堆时禁用low-fragmentation heap。如果你直接运行你的exe,系统会根据需要使用低碎片堆(LFH)来维护Windows Vista之后的内存分配请求,如果你的应用程序有很多分配和免费,LFH可以大大提高应用程序的性能。
我在很久以前尝试提高Window XP下的应用程序性能时会遇到同样的问题,而XP上默认禁用LFH。我添加了代码以在我的应用程序中启用LFH,然后我发现代码仅在应用程序从资源管理器启动时才起作用,而不是在VS中启动调试时工作。