c++ - std::map clear() 在调试器中的性能?

标签 c++ visual-studio performance stl debugging

附带的简单测试程序测试了清空一个简单的 std::map 的性能。使用 MSVC 2008 和 2010,从命令提示符执行时调试构建将花费 <30 秒,但从调试器中执行时将近 3 分钟。对 clear() 的调用是造成差异的全部原因。如果我闯入调试器,调用堆栈将始终指向 HeapFree。
问:为什么会有这么大的差异?我能否以某种方式更改调试堆设置,以便在调试器中执行时速度更快?

#include <map>

int
main ( int, char )
{
    std::map< time_t, double > test;
    for ( int i = 0; i < 1000000; ++i )
    {
        test[i] = i / 3.14;
    }
    test.clear();
    return 0;
}

最佳答案

尝试在程序的初始环境中设置环境变量 _NO_DEBUG_HEAP=1。这会禁用 Windows 的内部调试堆,这可能会使调试内存损坏问题变得更加困难。

KB article提到标志,如果程序在没有该环境变量的调试器中运行,您可以推断默认(低碎片堆)被禁用。另见 blog post ,其中讨论了调试堆如何使他们的程序减慢 3-5 倍。

关于c++ - std::map clear() 在调试器中的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3768724/

相关文章:

C++程序大数据内存不足

visual-studio - MSVS : How can I set the x64 as the default, 而不是 AnyCPU?

wpf - 发布时 Visual Studio 2017 先决条件中缺少 .NET Framework 4.0

sql - 使用 VIEW 进行 SELECT 操作可以提高性能吗?

c++ - 循环文件映射会降低性能

c++ - 使用在每种类型的可变参数模板上模板化的类初始化元组

c++ - Boost msm 子子状态机

c# - Visual Studio 2008 调试 - 跳过代码

mysql - 如何优化以下 SQL 查询?

java - SOLR,独立于 Jetty 服务器或作为我现有 Tomcat 中的 Web 应用程序?