【问题标题】:C/C++ Serialize Fast : Boost vs Cpickle vs Json vs Protocol bufferC/C++ 快速序列化:Boost vs Cpickle vs Json vs Protocol buffer
【发布时间】:2011-04-30 05:09:03
【问题描述】:

我需要在二进制字符串中序列化 C/C++ 结构,速度非常快。

Env = Windows,Boost 1.44,Python 2.4。

我们有 3 个不同的结构需要序列化: 基本:int、double、long、float、string(或 char*) 向量: - 每个元素可以是:Basic 或 Vector 或 Map --> 矢量
地图: - 每个 Value 元素可以是:Basic 或 Vector 或 Map --> map Basic 或 List 或 Map >

我尝试使用 cPickle 序列化 CPython 定义的结构如上。 序列化时间:1,5 s 我尝试使用不同类的 boost 1.44 做同样的事情: - 具有多态性(指针)和虚函数 -> 35 s - 使用 boost::variant --> 7s

我无法解释 Boost 和 Cpickle 之间的差异如何太大。 我注意到,boost 序列化向量和向量的序列化时间是 10 倍。( TimeSerialize (vector) = 10 * TimeSerialize(vector) 所以我的想法是使用 boost::variant 来避免指针。但是很慢。

我没有尝试 protocole Buffer 和 JsonCpp。 我尝试全部用 C++ 开发而不使用 Python。 但目前 Python 的序列化速度比 C++ 快 5。

如果有人可以帮助我。

【问题讨论】:

  • 您是否启用了编译器优化(例如 -O2)并禁用了调试(例如,no -g)?
  • 如果 Python 更快:使用 Python!

标签: c++ c serialization


【解决方案1】:

Boost 的设计目标不包括最快。我猜protobuf会更快,但更难使用。我只是为自己的项目做了序列化代码。我做了一些类似于MFC 中实现的事情。它相当快,没有很多开销。如果您真的需要速度,请自行选择this

【讨论】:

  • 我没有实现自己的序列化程序,但它似乎是最好的方法。
  • 如果有人可以帮助我。
猜你喜欢
  • 2012-06-21
  • 1970-01-01
  • 2014-12-30
  • 2019-02-23
  • 2010-10-20
  • 1970-01-01
  • 2018-11-10
  • 2011-10-21
  • 1970-01-01
相关资源
最近更新 更多