2009-06-29 83 views
8

如果性能是一個問題,我是否應該使用ascii/text序列化的二進制序列化?Boost序列化性能:文本與二進制格式

有人測試過大量的數據嗎?

+0

有趣的話題。閱讀此:http://stackoverflow.com/questions/4558382/boostserialization-high-memory-consumption-during-serialization – 2011-02-08 16:49:49

回答

13

我用boost.serialization與一個存儲矩陣和向量中表示查找表和 一些元數據(串)的內存大小約200MByte。 IIRC用於將 磁盤加載到內存中,文本存檔需要3分鐘,而在WinXP上使用二進制存檔 需要4秒。

+0

3分鐘的聲音...莫名其妙地慢。那些不是POD類型:) – sehe 2014-04-11 13:32:58

1

對於涉及加載包含大量(數千個)嵌套存檔類的大類的問題進行基準測試。

要更改格式,使用檔案流

boost::archive::binary_oarchive 
boost::archive::binary_iarchive 

,而不是

boost::archive::text_oarchive 
boost::archive::text_iarchive 

用於加載(二進制)歸檔代碼如下:

std::ifstream ifs("filename", std::ios::binary); 
boost::archive::binary_iarchive input_archive(ifs); 
Class* p_object; 
input_archive >> p_object; 

的文件和以上代碼片段的優化gcc版本的壁掛時間爲:

  • ASCII:820MB(100%),32.2 秒(100%)。
  • 二進制:620MB(76%),14.7秒(46%)。

這是來自固態驅動器,沒有任何流壓縮。

所以速度的增益大於文件大小的建議,並且使用二進制獲得額外的獎勵。