Konstantin
Konstantin

Reputation: 6131

Boost serialization performance: text vs. binary format

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

Has anybody tested it on a large amount of data?

Upvotes: 10

Views: 5909

Answers (3)

mirams
mirams

Reputation: 766

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.

Upvotes: 5

Maik Beckmann
Maik Beckmann

Reputation: 5733

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.

Upvotes: 13

jitter
jitter

Reputation: 54605

I suggest you look into protobuf - Protocol Buffers if performance is an issue

"Protocol Buffers" from .Net

Upvotes: 1

Related Questions