c++ - 在 Visual Studio 中发布版本仍然更慢?

标签 c++ performance visual-studio build

当然,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/

相关文章:

c++ - 如何制作模板循环?

c++ - 反转 C++ 字符串的时间复杂度

c++ - 在 Linux 上交叉编译 Windows 应用程序时如何链接到 Winsock?

mysql - MySQL 中的 UNION ALL 性能不佳

.net - 将项目添加到字典的 LINQ 方法

visual-studio - VS 2015 使用旧的 TypeScript 版本

azure - Visual Studio 如何选择 Azure Functions Tools 版本?

c++ - 在 C++ 中加载数据的最快方法

arrays - 高效的钻头容器

wpf - Visual Studio 设计时事件处理