2014-10-10 52 views
1

我已經使用QDataStream序列化了一個地圖並將該對象寫入了一個文件。反序列化的地圖的大小在qt中增加C++

當我反序列化它並將地圖加載到內存中時,序列化的文件大小爲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。

感謝您的幫助。

+0

什麼問題?你可以創建一個簡單的應用程序,重現問題? – Ezee 2014-10-10 09:59:04

+0

你如何測量內存消耗? – UmNyobe 2014-10-10 10:06:59

+0

我已更新該問題。謝謝! – aditya 2014-10-10 11:12:19

回答

0

代碼有問題。 MyMap是什麼?我沒有看到它宣佈。此外,你正在串行化一個指向myMap(這是一個堆棧數組標識符意味着:一個指針),我無法理解你如何以這種方式獲得1,5MB文件。

但是,即使你已經定義的模板超載operator<<或只是超載operator<<接受指針myMap類型(即三倍分類在開始的時候)你還在寫的100只是一個目標當然文件可能很容易比一組100個空物體小得多。

如果我看到更多的解釋,我會更新我的答案。