C++ 提高序列化性能:文本与二进制格式

C++ 提高序列化性能:文本与二进制格式,c++,boost-serialization,C++,Boost Serialization,如果性能有问题,我应该更喜欢二进制序列化而不是ascii/文本序列化吗 有人在大量数据上测试过它吗?我建议您研究一下性能是否是一个问题 我使用boost.serialization来存储表示查找表和 内存大小约为200字节的一些元数据(字符串)。IIRC用于从 将磁盘放入内存文本存档需要3分钟,而使用二进制存档需要4秒 在WinXP上。针对一个涉及加载包含大量(数千)嵌套存档类的大型类的问题对其进行了基准测试 要更改格式,请使用存档流 boost::archive::binary_oarchiv

如果性能有问题,我应该更喜欢二进制序列化而不是ascii/文本序列化吗

有人在大量数据上测试过它吗?

我建议您研究一下性能是否是一个问题


我使用boost.serialization来存储表示查找表和 内存大小约为200字节的一些元数据(字符串)。IIRC用于从 将磁盘放入内存文本存档需要3分钟,而使用二进制存档需要4秒
在WinXP上。

针对一个涉及加载包含大量(数千)嵌套存档类的大型类的问题对其进行了基准测试

要更改格式,请使用存档流

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构建的文件和walltimes包括:

  • ascii:820MB(100%),32.2秒(100%)
  • 二进制:620MB(76%),14.7秒(46%)
这是来自固态驱动器,没有任何流压缩


因此,速度上的增益比文件大小所建议的要大,使用二进制文件可以获得额外的好处。

有趣的话题。读这个:3分钟的声音。。。令人费解的慢。这些不是吊舱类型:)