我需要以二进制字符串序列化 C/C++ 结构,速度非常快。
环境 = Windows,Boost 1.44,Python 2.4。
我们有 3 种不同的结构要序列化:
基本类型:int、double、long、float、string(或 char*)
vector :
- 每个元素可以是:Basic 或 Vector 或 Map
--> vector <基本、 vector 、 map >
map :
- 每个 Value 元素可以是:Basic 或 Vector 或 Map
--> map Basic 或 List 或 Map >
我尝试使用 cPickle 序列化 CPython 定义的结构,如上。 序列化时间:1.5 秒 我用不同类别的 boost 1.44 尝试同样的事情: - 多态(指针)和虚函数 -> 35 秒 - 使用 boost::variant --> 7s
我无法解释 Boost 和 Cpickle 之间的差异有多大。 我注意到,序列化 vector 和 vector 的提升的序列化时间是因子 10。( TimeSerialize (vector) = 10 * TimeSerialize(vector) 所以我的想法是使用 boost::variant 来避免指针。但是很慢。
我没有尝试 Protocol Buffer 和 JsonCpp。 我尝试全部用 C++ 开发而不使用 Python。 但目前 Python 的序列化速度比 C++ 快 5。
如果有人可以帮助我。
最佳答案
Boost 的设计目标不包括成为最快的。我猜想 protobuf 会更快,但更难使用。我只是为自己的项目做了序列化代码。我做了类似于 MFC 中实现的事情.它相当快,没有很多开销。如果你真的需要速度,你自己喜欢 this .
关于c++ - C/C++ 快速序列化 : Boost vs Cpickle vs Json vs Protocol buffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4014850/