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