8
A
回答
13
我用boost.serialization與一個存儲矩陣和向量中表示查找表和 一些元數據(串)的內存大小約200MByte。 IIRC用於將 磁盤加載到內存中,文本存檔需要3分鐘,而在WinXP上使用二進制存檔 需要4秒。
+0
3分鐘的聲音...莫名其妙地慢。那些不是POD類型:) – sehe 2014-04-11 13:32:58
1
我建議你看看protobuf - Protocol Buffers如果性能是一個問題
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%)。
這是來自固態驅動器,沒有任何流壓縮。
所以速度的增益大於文件大小的建議,並且使用二進制獲得額外的獎勵。
有趣的話題。閱讀此:http://stackoverflow.com/questions/4558382/boostserialization-high-memory-consumption-during-serialization – 2011-02-08 16:49:49