C / C ++快速序列化:Boost vs Cpickle vs Json vs Protocol buffer

时间:2010-10-25 13:12:52

标签: c++ c serialization

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

Env = Windows,Boost 1.44,Python 2.4。

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

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

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

我没有尝试protocole Buffer和JsonCpp。 我尝试使用C ++开发所有内容而不使用Python。 但目前Python比串行化的速度快了5倍。

如果有人可以帮助我。

1 个答案:

答案 0 :(得分:1)

Boost的设计目标不包括最快。我猜想protobuf会更快,但它更难用。我刚为自己的项目编写了序列化代码。我做了类似MFC中实现的操作。它没有很多开销,速度相当快。如果你真的需要速度自己像this那样。