如果性能是一个问题,我应该更喜欢二进制序列化而不是 ascii / 文本序列化吗?
有人用大量数据测试过吗?
我使用 boost.serialization 来存储表示查找表的矩阵和向量以及一些内存大小约为 200MByte 的元数据(字符串)。IIRC 用于从磁盘加载到内存中,文本存档需要 3 分钟,而使用 WinXP 上的二进制存档需要 4 秒。
针对涉及加载包含大量(数千)嵌套归档类的大型类的问题对其进行了基准测试。
要更改格式,请使用存档流
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 构建的文件和 walltime 是:
这是来自固态驱动器,没有任何流压缩。
因此,速度上的增益比文件大小建议的要大,并且使用二进制可以获得额外的好处。
如果性能是一个问题,我建议您查看protobuf - 协议缓冲区