我正在开发一种在3D空间中映射信息的软件。我使用容器来保存这些信息。我使用的容器是
QList< QList< QMap<float, QList<quint16> > > > lidardata;
它基本上是一个2D网格,表示每个单元格为1米x 1米的矩形区域,并且在每个单元格中 QMap 包含表示高度的键值和四个相关值的列表at那个高度。这样我可以存储五个值(高度+其他值)。我在这样的循环中插入值( rown 和 coln 分别是行和列索引)
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>
存储相同数量的信息会在内存中占用更多空间吗?
有没有人有任何限制空间的提示?如果什么都没有,我会回到原来的解决方案。
答案 0 :(得分:1)
如评论中所述:
您的代码可能会受到Primitive Obsession.
的影响尝试使用本教程中所述的ValueObject修复解决您的问题:创建一个包含所有需要的属性的类,并处理此类的实例,而不是维护嵌套的Qlist
和QMap
。