Увеличение размера десериализованной карты в qt Stack Overflow

Я сериализовал карту, используя QDataStream, и записал объект в файл.

Сериализованный размер файла составляет 1,5 МБ, когда я снова десериализирую его и загружаю карту в память, потребление памяти составило 300 МБ. Я использовал тот же QDataStream для десериализации.

Можете ли вы сообщить мне причину, по которой десериализация сериализованного объекта размером 1,5 МБ, записанного в файл на диске, заняла в памяти 300 МБ.

Сериализация:

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.
После десериализации потребляемая память была 300 мб.

Спасибо за помощь.

1

Решение

Что-то не так с кодом. Что такое MyMap? Я не вижу заявленного. Кроме того, вы сериализуете только указатель на myMap (это то, что означает идентификатор стекового массива: указатель), и я не могу понять, как вы получаете 1,5 МБ файл таким образом.

Однако, даже если вы определили шаблон для перегрузки operator<< или просто перегружен operator<< принять указатель на myMap Тип (это три класса дерева в начале) вы все еще пишете только один объект из 100. Конечно, файл может быть намного меньше, чем набор из 100 пустых объектов.

Я обновлю свой ответ, если увижу больше объяснений от вас.

0

Другие решения


По вопросам рекламы [email protected]