Kon*_*tin 8 c++ boost-serialization
如果性能有问题,我是否应该优先选择ascii/text序列化的二进制序列化?
有人在大量数据上测试过吗?
Mai*_*ann 13
我使用boost.serialization来存储表示查找表的矩阵和向量以及内存大小约为200MByte的一些元数据(字符串).IIRC用于从磁盘加载到内存中,文本存档需要3分钟,而使用WinXP上的二进制存档需要4秒.
针对涉及加载包含大量(数千个)嵌套存档类的大型类的问题对其进行了基准测试。
要更改格式,请使用存档流
boost::archive::binary_oarchive
boost::archive::binary_iarchive
Run Code Online (Sandbox Code Playgroud)
代替
boost::archive::text_oarchive
boost::archive::text_iarchive
Run Code Online (Sandbox Code Playgroud)
加载(二进制)存档的代码如下所示:
std::ifstream ifs("filename", std::ios::binary);
boost::archive::binary_iarchive input_archive(ifs);
Class* p_object;
input_archive >> p_object;
Run Code Online (Sandbox Code Playgroud)
上述代码片段的优化 gcc 构建的文件和 walltime 为:
这是来自固态驱动器,没有任何流压缩。
因此,速度的提升比文件大小所建议的要大,并且使用二进制文件还可以获得额外的好处。