9

パフォーマンスが問題になる場合は、ASCII /テキストのシリアル化よりもバイナリのシリアル化を優先する必要がありますか?

誰かが大量のデータでそれをテストしましたか?

4

3 に答える 3

13

boost.serializationを使用して、ルックアップテーブルを表す行列とベクトル、およびメモリ内のサイズが約200MByteのいくつかのメタデータ(文字列)を格納しました。ディスクからメモリにロードするためのIIRCは、テキストアーカイブに3分かかったのに対し、WinXPのバイナリアーカイブを使用した場合は4秒かかりました。

于 2009-06-29T13:36:52.407 に答える
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ビルドのファイルとウォールタイムは次のとおりです。

  • アスキー:820MB(100%)、32.2秒(100%)。
  • バイナリ:620MB(76%)、 14.7秒(46%)。

これは、ストリーム圧縮なしのソリッドステートドライブからのものです。

したがって、速度の向上はファイルサイズが示唆するよりも大きく、バイナリを使用すると追加のボーナスが得られます。

于 2014-04-11T16:39:59.213 に答える
1

パフォーマンスが問題になる場合は、protobuf-ProtocolBuffersを調べることをお勧めします

.Netの「プロトコルバッファ」

于 2009-06-29T12:38:30.823 に答える