本博客已迁移至: 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 这两个数字,我自己也非常吃惊,甚至感觉有点不可思议,但是,这就是实测结果!