0


我正在开发一个在 3D 空间中映射信息的软件。我使用一个容器来保存这些信息。我使用的容器是

 QList< QList< QMap<float, QList<quint16> > > > lidardata;

它基本上是一个 2D 网格,表示一个矩形区域,其中每个单元格为 1 米 x 1 米,并且在每个单元格中,QMap包含一个表示高度的键值和一个在该高度处的四个相关值的列表。这样我可以存储五个值(高度+其他值)。我在这样的循环中插入值(rowncoln分别是行和列索引)

QList<quint16> NEWLIST;

NEWLIST << (width*100.0) << (1000.0+sens*100.0) << (quint16)(intensity*1000.0) ;

lidardata[ rown ][ coln ].insert( heightValue, NEWLIST);

在这种方法之前,我没有使用QMap<float, QList<quint16>我使用QList<quint16>并仅附加 5 个值。
现在的问题是:运行我的程序很快就会耗尽内存。完成第一个解决方案(QList 而不是 QMap)占用了大约 800Mb 的内存,现在它在整个数据存储过程的 75% 处耗尽(大约 1.4 Gb)。
有人可以确认使用 QMap<float, QList<quint16>而不是 存储相同数量的信息QList<quint16>确实需要更多的内存空间吗?

有没有人有任何限制空间的提示?如果没有任何问题,我将回到旧的解决方案。

4

1 回答 1

1

正如评论中提到的:

您的代码可能会受到原始痴迷的困扰。

尝试使用本教程中所述的 ValueObject 修复来解决您的问题:创建一个具有所有需要的属性的类,并处理此类的实例,而不是维护嵌套Qlist的 s 和QMaps。

于 2013-05-14T14:15:15.600 回答