为什么我的调试器/ IDE连接时,我的STL代码运行速度太慢?
我正在使用Visual Studio 2008 SP1在Windows Vista Business x64,四核机器,8GB RAM上运行以下代码。
如果我构建了一个发布版本,并从命令行运行它,它会报告31ms。 如果我使用F5从IDE启动它,则报告23353ms。
这里是时代:(所有的Win32版本)
码:
#include <windows.h>
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
int runIntersectionTestAlgo()
{
set<int> set1;
set<int> set2;
set<int> intersection;
// Create 100,000 values for set1
for ( int i = 0; i < 100000; i++ )
{
int value = 1000000000 + i;
set1.insert(value);
}
// Create 1,000 values for set2
for ( int i = 0; i < 1000; i++ )
{
int random = rand() % 200000 + 1;
random *= 10;
int value = 1000000000 + random;
set2.insert(value);
}
set_intersection(set1.begin(),set1.end(), set2.begin(), set2.end(), inserter(intersection, intersection.end()));
return intersection.size();
}
int main(){
DWORD start = GetTickCount();
runIntersectionTestAlgo();
DWORD span = GetTickCount() - start;
std::cout << span << " millisecondsn";
}
在Microsoft调试器(windbg,kd,cdb,Visual Studio Debugger)下运行默认强制Windows使用调试堆而不是默认堆。 在Windows 2000及更高版本中,默认堆是低碎片堆,与调试堆相比,它非常好。 您可以使用HeapQueryInformation查询您正在使用的堆的种类。
要解决您的特定问题,可以使用本知识库文章中建议的许多选项之一:为什么可以在运行Windows Server 2003,Windows XP或Windows 2000的某些计算机上禁用低碎片堆(LFH)机制
对于Visual Studio,我更喜欢将_NO_DEBUG_HEAP=1
添加到Project Properties->Configuration Properties->Debugging->Environment
。 这对我来说总是有诀窍。
在VS IDE中按暂停显示额外的时间似乎花费在malloc / free中。 这将导致我相信MS的malloc和免费实现中的调试支持在附加调试器的情况下具有额外的逻辑。 这将解释从控制台和调试器出现的时间差异。
编辑:通过运行CTRL + F5 v。F5(我的机器上的1047ms v。9088ms)确认
所以这听起来像这可能只是当一个人连接调试器时发生的事情。 然而,由于这个原因,我无法将性能从30ms改为23,000ms,特别是当我的其他代码似乎运行速度与调试器是否连接速度一样快时。
链接地址: http://www.djcxy.com/p/82285.html上一篇: Why does my STL code run so slowly when I have the debugger/IDE attached?