febird.dataio vs boost.serialization 运行性能对比

我们已使用 terark.com 进行商业化运营

代码表示的是数据格式,DATA_IO_LOAD_SAVE 在 <febird/io/DataIO.h> 中定义

对于 boost.serializationDATA_IO_LOAD_SAVE 的定义相当于:

数据格式

写入性能

写入,表示序列化(serialize),也称为存储(save)

表1:写入性能,时间单位是微秒(us)loop 表示相同的数据重复写 count 次,而不是写 .size() 个不同的数据

比 boost 快 10 倍以上的项目标红,快 30 倍以上的 粗体红

class .size() boost File Native File Portable Memory Native Memory Portable Unchecked Native Unchecked Portable
loop
count 时间 时间 速度比 时间 速度比 时间 速度比 时间 速度比 时间 速度比 时间 速度比
vector<pair<int,int> > 4000 1004 593 1.69 1114 0.90 198 5.07 557 1.80 173 5.78 518 1.94
vector<MyData1> 4000 23918 1043 22.93 4044 5.91 510 46.86 2392 10.00 480 49.81 2415 9.90
vector<string> 4000 9266 3741 2.48 3480 2.66 3088 3.00 2916 3.18 2480 3.74 2430 3.81
map<int,string> 3756 19434 5018 3.87 5089 3.82 3679 5.28 3563 5.45 3436 5.66 3599 5.40
loop{MyData1} 4000 23592 2898 8.14 3622 6.51 1106 21.33 2203 10.71 1070 22.04 2037 11.58
loop{VarIntD} 4000 52832 8664 6.10 7255 7.28 7546 7.00 7307 7.23 7110 7.43 7476 7.07
vector<MyData23> 4000 68581 5768 11.89 6831 10.04 2242 30.59 3742 18.32 2155 31.82 3740 18.33

取该表格中的时间项,生成柱状图如下:

write-vector-pair-int-int

write-vector-mydata1

write-vector-string

write-map-int-string

write-loop-mydata1

write-loop-varintd

write-vector-mydata23

读取性能

读取,表示反序列化(deserialize),也称为加载(load)

表2:读取性能,时间单位是微秒(us) loop 表示相同的数据重复读 count 次,而不是读 .size() 个不同的数据

比 boost 快 20 倍以上的项目 标红,快 50 倍以上的 粗体红

class .size() boost File Native File Portable Memory Native Memory Portable Unchecked
Native
Unchecked
Portable
loop
count 时间 时间 速度比 时间 速度比 时间 速度比 时间 速度比 时间 速度比 时间 速度比
vector<pair<int,int> > 4000 766 400 1.92 500 1.53 170 4.49 301 2.55 172.00 4.45 281 2.72
vector<MyData1> 4000 26738 868 30.79 1543 17.33 505 52.91 1182 22.61 530 50.37 1199 22.29
vector<string> 4000 41097 3812 10.78 3924 10.47 3134 13.11 3150 13.05 2985 13.77 2731 15.04
map<int,string> 3756 63985 58671 1.09 58689 1.09 58097 1.10 57657 1.11 57228 1.12 57136 1.12
loop{MyData1} 4000 23486 1547 15.18 2957 7.94 114 205.55 1549 15.16 17 1355.98 1578 14.88
loop{VarIntD} 4000 88218 2580 34.19 2575 34.25 4586 19.23 4610 19.13 2472 35.68 2628 33.56
vector<MyData23> 4000 75386 4667 16.15 5375 14.02 1894 39.79 2650 28.44 1838 41.00 2420 31.15

其中,205.551355.98 这两个数字,我自己也非常吃惊,甚至感觉有点不可思议,但是,这就是实测结果!

取该表格中的时间项,生成柱状图如下:

read-vector-pair-int-int

read-vector-mydata1

read-vector-string

read-map-int-string

read-loop-mydata1

read-loop-varintd

read-vector-mydata23

我们已使用 terark.com 进行商业化运营

作者:
该日志由 csdn-whinah 于2009年04月06日发表在C++序列化分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
转载请注明: febird.dataio vs boost.serialization 运行性能对比
标签: ,
【上一篇】
【下一篇】

您可能感兴趣的文章:

4 个回复

  1. dx2120说道:

    学习了febird作品,对楼主的奉献精神敬佩不已,呵呵~~
    好像febird很久没有更新了。下载新的代码,其中有好多第三方库并没有被引用,致使编译困难啊。

  2. dx2120说道:

    另外,dataio好像没有实现类内部指针的序列化,这可能限制了大多实际项目的序列化使用。

  3. whinah说道:

    小的更新还是有的,大的更新的确很久都没有了,我会尽量让编译容易点

  4. whinah说道:

    指针的序列化一般跟具体应用高度相关,这样的事还是让 app 来做,程序员都是很聪明的,越俎代庖不光给自己添麻烦,也给使用者添乱。我故意disable了指针的序列化,如果尝试序列化指针,会有编译错误的

发表评论

您必须 登录 后才能发表评论。