如果有人可以帮助我,我完全没有想法。
所以我有这段代码(这是我代码的一个非常简化的版本):
hover
基本上,它只是从二进制文件中读取记录。 active
得到数据,并用来自它的数据填充变量。然后,它将电话号码插入到地图中(为了调试我实际上只是插入一个int和一个空字符串)。
while(readNewFile())
{
while(getNewStructFromFile())
{
unsigned long starttime = GetTickCount();
customerData.fillFromBinaryData(structPointer);
cout<< GetTickCount() - starttime;
aMap.insert(pair<int,string>(customerData.phoneNumber,""));
}
// Ouptut all data
aMap.clear();
}
进行调试时,它向我显示延迟发生在customerData
中(在最初的0ms,然后它跳转到30-40 ms(用于填写类变量))。但是,如果我评论这个简单的地图插入,用数据填充对象没有延迟!那逻辑在哪里?
有人可以给我一个提示,我是出于想法。对不起,如果这个问题不是很好的话。
我尝试了不同类型的地图,但同样,它告诉我延迟不在地图插入中。
编辑/可能的解决方案:
如果有人有类似的问题,我安装了VS2015,使用地图的延迟消失了!我不确定这是如何相关的,但是华友世纪!
答案 0 :(得分:1)
可能会发生这样的情况,即如果地图变得非常大,则存在内存管理问题,fillFromBinaryData
需要一些内存分配,现在速度较慢。由于内存碎片可能?
我建议为这个特定目的尝试一些库。但是,我忘记了它们的名称。我只知道有一个来自谷歌,“jemalloc”或类似的东西。
自定义内存池的要点是,您可以将内存分配为一大堆,并且仅在具有自定义分配器的应用程序范围内使用它。
还有一件事可能是停止使用地图并使用无序地图。使用完美的哈希函数将插入时间复杂度从O(logn)更改为O(1),因为对您而言,这是一个电话号码。