我有一个类,其中包括一个单例和一个成员
主函数只需要一行代码。
std::unordered_map
,其键为unsigned int
,值为一个结构体。
问题出现在向其中添加大量元素时。
在VS中,此任务需要约2秒。 在QT中,它需要长达15秒。
销毁容器的元素(程序结束或单例类析构函数中)在VS中甚至不到半秒钟。 在QT中,此任务需要数分钟。
如果有人知道问题所在,请留下回答或评论。
注意:可以在运行时调用函数Fill
几次。 如果必须等待几分钟才能清除容器...大多数时间似乎花费在_Iterator_base12::_Orphan_me
内部。
以下是可重现代码(不含主函数):
#include <unordered_map>
int RandomNumber(int min, int max)
{
return (rand() % ((max + 1) - (min))) + (min);
}
#define MAX_OTHER_DATA 5
struct OtherData
{
int Charges;
};
struct DataHolder
{
unsigned int ID;
std::string Name; //std::string / QString
int MaxCount;
int Stack;
unsigned int Duration;
OtherData other[MAX_OTHER_DATA];
unsigned int MaxDur;
};
class Worker
{
protected:
Worker() {}
public:
~Worker(void)
{
v.clear();
}
static Worker &instance(void)
{
static Worker work;
return work;
}
void Fill()
{
v.clear();
const std::size_t size = 38618; //current size - data fetched from a database
for (unsigned int i = 0U; i < size; ++i)
{
DataHolder it;
it.ID = RandomNumber(1, 60000);
it.Name = ""; //Usually populated
it.MaxCount = RandomNumber(0, 10);
it.Stack = RandomNumber(1, 10000);
it.Duration = RandomNumber(30, 250);
it.MaxDur = RandomNumber(0, 200);
v.insert(std::make_pair(i, it));
}
}
private:
std::unordered_map<unsigned int, DataHolder> v;
};
#define sWorker Worker::instance()
主函数只需要一行代码。