1

我已经使用 QDataStream 序列化地图并将对象写入文件。

当我再次反序列化并将地图加载到内存中时,序列化文件大小为1.5mb,内存消耗为300mb。我使用相同的 QDataStream 进行反序列化。

你能告诉我为什么反序列化写入磁盘文件的 1.5mb 序列化对象在内存中占用 300mb 的原因。

序列化:

QMap< QString, QSet< QString > >  myMap[100];
QSet<QString> mySet; // Assume it has some data in it.
QSet<QString> mySet1; // Assume it has some data in it.
MyMap.insert("a", mySet);
MyMap.insert("b", mySet1);
QFile f( strOutFile );
f.open(QIODevice::WriteOnly);
QDataStream streamOut( &f );
streamOut << myMap;

反序列化:

QFile f(StrInFile);
QMap< QString, QSet< QString > >  InMap[100];
QDataStream streamIn( f, QIODevice::ReadOnly );
streamIn >> InMap[index];

我已经使用 MEMORYSTATUSEX windows 库检查了内存消耗。反序列化后,消耗的内存为 300 mb。

谢谢您的帮助。

4

1 回答 1

0

代码有问题。是什么MyMap?我没有看到它宣布。此外,您只是序列化一个指针myMap(这就是堆栈数组标识符的含义:一个指针),我无法理解您如何以这种方式获取 1,5MB 文件。

但是,即使您已将模板定义为重载operator<<或只是重载operator<<以接受指向myMap类型的指针(开头的三重类树),您仍然只编写一个 100 的对象。当然文件可能很容易比一组 100 个空对象。

如果我看到你的更多解释,我会更新我的答案。

于 2017-02-16T08:10:12.040 回答