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

标签 c++ c serialization

我需要以二进制字符串序列化 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/

相关文章:

c++ - 如何将已编译的正则表达式 (std::regex) 保存/序列化到文件中?

c# - 将Json String反序列化为多种Object类型

c++ - 等待其他线程继续

c++ - C中指向二维数组的二维指针

c++ - MakeFile 只编译一个文件

python - 痛饮 : AttributeError: 'module' object has no attribute 'fact'

c - C声明语法

c# - 从 C# 中的文件反序列化 Json

c++ - 将 Char 数组的元素复制为 Short

c++ - 在 C++ 中使用继承时避免不必要的函数声明/定义