【问题标题】:Boost serialization performance: text vs. binary format提升序列化性能:文本与二进制格式
【发布时间】:2009-06-29 12:34:40
【问题描述】:

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

有人用大量数据测试过吗?

【问题讨论】:

标签: c++ boost-serialization


【解决方案1】:

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

【讨论】:

  • 3 分钟听起来……莫名其妙的慢。那些不是 POD 类型:)
【解决方案2】:

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

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

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;

上述代码 sn-p 的优化 gcc 构建的文件和时间是:

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

这是来自固态驱动器,没有任何流压缩。

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

【讨论】:

    【解决方案3】:

    如果性能有问题,我建议你查看protobuf - Protocol Buffers

    "Protocol Buffers" from .Net

    【讨论】:

      猜你喜欢
      • 2021-12-03
      • 2010-11-08
      • 2021-07-11
      • 2011-09-26
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多