附带的简单测试程序测试了清空一个简单的 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/