提高序列化性能:文本与二进制格式

发布于 2024-07-26 03:16:41 字数 70 浏览 4 评论 0 原文

如果性能是一个问题,我是否应该更喜欢二进制序列化而不是 ascii/文本序列化?

有人用大量数据测试过吗?

Should I prefer binary serialization over ascii / text serialization if performance is an issue?

Has anybody tested it on a large amount of data?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

沧桑㈠ 2024-08-02 03:16:41

我使用 boost.serialization 来存储表示查找表的矩阵和向量以及
一些内存大小约为 200MByte 的元数据(字符串)。 IIRC 用于加载
将文本存档从磁盘写入内存需要 3 分钟,而使用二进制存档则需要 4 秒
在WinXP上。

I used boost.serialization to store matrices and vectors representing lookup tables and
some meta data (strings) with an in memory size of about 200MByte. IIRC for loading from
disk into memory it took 3 minutes for the text archive vs. 4 seconds using the binary archive
on WinXP.

祁梦 2024-08-02 03:16:41

针对涉及加载包含大量(数千个)嵌套存档类的大型类的问题对其进行了基准测试。

要更改格式,请使用存档流

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 为:

  • ascii:820MB(100 %),32.2 秒 (100%)。
  • 二进制:620MB (76%),14.7 秒 (46%)。

这是来自固态驱动器,没有任何流压缩。

因此,速度的提升比文件大小所建议的要大,并且使用二进制文件还可以获得额外的好处。

Benchmarked it for a problem involving loading a large class containing lots (thousands) of nested archived classes.

To change the format, use archive streams

boost::archive::binary_oarchive
boost::archive::binary_iarchive

instead of

boost::archive::text_oarchive
boost::archive::text_iarchive

The code for loading the (binary) archive looks like:

std::ifstream ifs("filename", std::ios::binary);
boost::archive::binary_iarchive input_archive(ifs);
Class* p_object;
input_archive >> p_object;

The files and walltimes for an optimised gcc build of the above code snippet are:

  • ascii: 820MB (100%), 32.2 seconds (100%).
  • binary: 620MB (76%), 14.7 seconds (46%).

This is from a solid state drive, without any stream compression.

So the gain in speed is larger than the file size would suggest, and you get an additional bonus using binary.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文