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

本博客已迁移至: http://www.nfabo.cn/p/?p=65

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

对boost,DATA_IO_LOAD_SAVE 的定义相当于:

#define DATA_IO_LOAD_SAVE(Class, Members) \
    friend class boost::serialization::access; \
    template<class Archive> \
    void serialize(Archive & ar, const unsigned int version) \
    { ar Members; }

数据格式:

struct MyData1 {
    uint32_t a, b, c;
    uint32_t d[5];
    DATA_IO_LOAD_SAVE(MyData1, &a&b&c&d)
}; 
struct MyData2 {
    uint32_t a, b, c, d;
    MyData1 e;
DATA_IO_LOAD_SAVE(MyData2, &a&b&c&d&e)
};
struct MyData3 {
    uint32_t a, b, c;
    uint32_t d;
};
DATA_IO_DUMP_RAW_MEM(MyData3)
 
struct VarIntD {
    var_uint32_t a, b, c, d, e, f; 
    VarIntD() {
        a = 127;
        b = 128;
        c = 128*128;
        d = 128*128*128;
        e = 128*128*128*128;
        f = 1;
    }
    DATA_IO_LOAD_SAVE(VarIntD, &a&b&c&d&e&f)
};
typedef pair<MyData2, MyData3> MyData23; 

写入性能

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

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

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

class.size()boostFile NativeFile PortableMemory NativeMemory PortableUnchecked
Native
Unchecked
Portable
loop
count时间时间速度比时间速度比时间速度比时间速度比时间速度比时间速度比
vector<pair<int,int> >400010045931.6911140.901985.075571.801735.785181.94
vector<MyData1>400023918104322.9340445.9151046.86239210.0048049.8124159.90
vector<string>4000926637412.4834802.6630883.0029163.1824803.7424303.81
map<int,string>37561943450183.8750893.8236795.2835635.4534365.6635995.40
loop{MyData1}40002359228988.1436226.51110621.33220310.71107022.04203711.58
loop{VarIntD}40005283286646.1072557.2875467.0073077.2371107.4374767.07
vector<MyData23>400068581576811.89683110.04224230.59374218.32215531.82374018.33

读取性能

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

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

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

class.size()boostFile NativeFile PortableMemory NativeMemory PortableUnchecked
Native
Unchecked
Portable
loop
count时间时间速度比时间速度比时间速度比时间速度比时间速度比时间速度比
vector<pair<int,int> >40007664001.925001.531704.493012.55172.004.452812.72
vector<MyData1>40002673886830.79154317.3350552.91118222.6153050.37119922.29
vector<string>400041097381210.78392410.47313413.11315013.05298513.77273115.04
map<int,string>375663985586711.09586891.09580971.10576571.11572281.12571361.12
loop{MyData1}400023486154715.1829577.94114205.55154915.16171355.98157814.88
loop{VarIntD}400088218258034.19257534.25458619.23461019.13247235.68262833.56
vector<MyData23>400075386466716.15537514.02189439.79265028.44183841.00242031.15

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值