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() 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

读取性能

读取,表示反序列化(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.55 和 1355.98 这两个数字,我自己也非常吃惊,甚至感觉有点不可思议,但是,这就是实测结果!

你可能感兴趣的:(struct,String,IO,serialization,archive)