gpt4 book ai didi

c++ - 为什么在连接调试器/IDE 后我的 STL 代码运行如此缓慢?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:02 24 4
gpt4 key购买 nike

我正在运行以下代码,使用 Visual Studio 2008 SP1,在 Windows Vista Business x64、四核机器、8gb 内存上。

如果我构建一个发布版本,并从命令行运行它,它会报告 31 毫秒。如果我随后使用 F5 从 IDE 启动它,它会报告 23353 毫秒。

这是时间:(所有 Win32 版本)

  • 调试,命令行:421 毫秒
  • DEBUG,来自 IDE:24,570 毫秒
  • RELEASE,命令行:31ms
  • 从 IDE 发布:23,353 毫秒

代码:

#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 << " milliseconds\n";
}

最佳答案

默认情况下,在 Microsoft 调试器(windbg、kd、cdb、Visual Studio 调试器)下运行会强制 Windows 使用调试堆而不是默认堆。在 Windows 2000 及更高版本上,默认堆是 Low Fragmentation Heap ,与调试堆相比非常好。您可以使用 HeapQueryInformation 查询正在使用的堆类型.

要解决您的特定问题,您可以使用此知识库文章中推荐的众多选项之一:Why the low fragmentation heap (LFH) mechanism may be disabled on some computers that are running Windows Server 2003, Windows XP, or Windows 2000

对于 Visual Studio,我更喜欢将 _NO_DEBUG_HEAP=1 添加到 Project Properties->Configuration Properties->Debugging->Environment。这对我来说总是有用的。

关于c++ - 为什么在连接调试器/IDE 后我的 STL 代码运行如此缓慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1060337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com