cpp serializers
1.0.0
比较 C++ 的各种数据序列化库。
该项目没有任何外部序列化库依赖项。所有(boost、thrift 等)所需的库都会自动下载并构建,但您需要足够的可用磁盘空间(约 2.3G)来构建所有组件。要构建此项目,您需要一个支持 C++14 功能的编译器。项目使用 Clang 和 GCC 编译器进行了测试。
git clone https://github.com/thekvs/cpp-serializers.git
cd cpp-serializers
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .
$ ./benchmark -h
Benchmark various C++ serializers
Usage:
benchmark [OPTION...]
-h, --help show this help and exit
-l, --list show list of supported serializers
-c, --csv output in CSV format
-i, --iterations arg number of serialize/deserialize iterations
-s, --serializers arg comma separated list of serializers to benchmark
$ ./benchmark -i 100000
$ ./benchmark -i 100000 -s protobuf
$ ./benchmark -i 100000 -s protobuf,cereal
以下结果是在运行 Ubuntu 16.04、配备 Intel Core i7 处理器的典型台式计算机上运行 1000000 次序列化-反序列化操作 50 次,然后对结果进行平均。使用的库的确切版本是:
串行器 | 物体的大小 | 平均。总时间 |
---|---|---|
节俭二进制 | 17017 | 1190.22 |
节俭紧凑型 | 13378 | 3474.32 |
原始缓冲区 | 16116 | 2312.78 |
促进 | 17470 | 1195.04 |
消息包 | 13402 | 2560.6 |
谷物 | 17416 | 1052.46 |
阿夫罗 | 16384 | 4488.18 |
亚斯 | 17416 | 302.7 |
yas-紧凑型 | 13321 | 2063.34 |
对于 capnproto 和 flatbuffers,由于它们已经以“序列化”形式存储数据,并且序列化基本上意味着获取指向内部存储的指针,因此我们测量完整的构建/序列化/反序列化周期。对于其他库,我们测量已构建的数据结构的序列化/反序列化周期。
串行器 | 物体的大小 | 平均。总时间 |
---|---|---|
卡普恩原型 | 17768 | 400.98 |
平面缓冲区 | 17632 | 491.5 |
大小以字节为单位,时间以毫秒为单位。