パフォーマンスが問題になる場合は、ASCII /テキストのシリアル化よりもバイナリのシリアル化を優先する必要がありますか?
誰かが大量のデータでそれをテストしましたか?
パフォーマンスが問題になる場合は、ASCII /テキストのシリアル化よりもバイナリのシリアル化を優先する必要がありますか?
誰かが大量のデータでそれをテストしましたか?
boost.serializationを使用して、ルックアップテーブルを表す行列とベクトル、およびメモリ内のサイズが約200MByteのいくつかのメタデータ(文字列)を格納しました。ディスクからメモリにロードするためのIIRCは、テキストアーカイブに3分かかったのに対し、WinXPのバイナリアーカイブを使用した場合は4秒かかりました。
ネストされたアーカイブクラスのロット(数千)を含む大きなクラスのロードに関連する問題のためにベンチマークしました。
形式を変更するには、アーカイブストリームを使用します
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ビルドのファイルとウォールタイムは次のとおりです。
これは、ストリーム圧縮なしのソリッドステートドライブからのものです。
したがって、速度の向上はファイルサイズが示唆するよりも大きく、バイナリを使用すると追加のボーナスが得られます。
パフォーマンスが問題になる場合は、protobuf-ProtocolBuffersを調べることをお勧めします