【发布时间】: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