如果性能有问题,我是否应该优先选择ascii / text序列化的二进制序列化?
有人在大量数据上测试过吗?
答案 0 :(得分:13)
我使用boost.serialization来存储表示查找表和表的矩阵和向量 一些元数据(字符串),内存大小约为200MByte。 IIRC用于装载 磁盘进入内存,文本存档需要3分钟,使用二进制存档需要4秒 在WinXP上。
答案 1 :(得分:3)
对于涉及加载包含大量(数千)嵌套归档类的大型类的问题进行基准测试。
要更改格式,请使用存档流
boost::archive::binary_oarchive
boost::archive::binary_iarchive
而不是
boost::archive::text_oarchive
boost::archive::text_iarchive
加载(二进制)存档的代码如下:
std::ifstream ifs("filename", std::ios::binary);
boost::archive::binary_iarchive input_archive(ifs);
Class* p_object;
input_archive >> p_object;
上述代码段的优化gcc版本的文件和挂号时间为:
这是来自固态驱动器,没有任何流压缩。
因此,速度的增加大于文件大小的建议,并且您可以使用二进制文件获得额外的奖励。
答案 2 :(得分:1)
如果效果有问题,我建议您调查protobuf - Protocol Buffers