I m在C++实施,与一个规模不大的树木结构(Brkhard-Keller-Tree, > 100 MB记忆)合作。 每一 no子的孩子的点子存放在QHash。
每一代母子都拥有孩子,3.1 ...... 和[n] ,孩子的边edge被贴上ed子(x, y[i])的标签,因此用 has子储存 no子是一种明显的解决办法。
class Node {
int value;
QHash<int, Node*> children;
/* ... */
};
我也想将其编成一个档案(目前使用QDataStream)。 这 tree树刚刚建成,然后又发生了变化。
建立树木和使树木脱硫相当缓慢。 I树的装水明显:每一 no子的复耕。 我认为,由于与<条码>新<<<>>>条码>操作者一起创建的许多节点,这是不乐观的。 我读到的有些地方,<代码>新相当缓慢。 最初的建筑并不是一个大问题,因为树 s相当稳定,树 t必须经常重建。 但是,从档案中装上树木应当尽可能快。
实现这一目标的最佳途径是什么?
必须更好地拯救整个树木,把整个树木放在一个有相邻节点的单一记忆区。 那么,为了节省和装上我不得不分配一劳永逸的整块,就将减少空中和空中化。
但是,为了执行这一规定,我必须重新实施QHash,AFAIK。
你们会做些什么来加速帝国化?
感谢你建议作一些总结。 成果如下:
在从档案中重建树木的同时
1 % of the time is consumed by my own new calls
65 % is consumed by loading the QHash objects (this is implemented by the
Qt Library) of each node
12 % is consumed by inserting the nodes into the existing tree
20 % is everything else
因此,这肯定不是我发出造成拖延的新呼吁,而是在每一个节点重建QHash物体。 这主要是:
QDataStream in(&infile);
in >> node.hash;
我是否必须挖掘QHash,看一看那里正在发生什么? 我认为,最好的解决办法是,可在没有重建内部数据结构需要的情况下,通过单一读写操作进行序列化。