Я сериализовал карту, используя 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 мб.
Спасибо за помощь.
Что-то не так с кодом. Что такое MyMap
? Я не вижу заявленного. Кроме того, вы сериализуете только указатель на myMap
(это то, что означает идентификатор стекового массива: указатель), и я не могу понять, как вы получаете 1,5 МБ файл таким образом.
Однако, даже если вы определили шаблон для перегрузки operator<<
или просто перегружен operator<<
принять указатель на myMap
Тип (это три класса дерева в начале) вы все еще пишете только один объект из 100. Конечно, файл может быть намного меньше, чем набор из 100 пустых объектов.
Я обновлю свой ответ, если увижу больше объяснений от вас.