2009-06-29 19 views
8

Soll ich binäre Serialisierung über ascii/Text Serialisierung bevorzugen, wenn die Leistung ein Problem ist?Boost-Serialisierung Leistung: Text vs. Binärformat

Hat jemand getestet es auf eine große Menge von Daten?

+0

Interessantes Thema. Lesen Sie hierzu: http://stackoverflow.com/questions/4558382/boostserialization-high-memory-consumption-uring-serialization –

Antwort

13

I verwendet Boost.Serialization Matrizen und Vektoren Tabellen darstellen Lookup zu speichern und einige Meta-Daten (Strings) mit einem in Speichergröße von ungefähr 200MByte. IIRC zum Laden von Diskette in den Speicher dauerte 3 Minuten für das Textarchiv vs. 4 Sekunden mit dem Binärarchiv auf WinXP.

+0

3 Minuten klingt ... unerklärlich langsam. Das waren keine POD-Typen :) – sehe

1

gebenchmarkt es für ein Problem im Zusammenhang mit einer großen Klasse Laden enthält viele (in Tausend) von verschachtelten archivierten Klassen.

das Format zu ändern, ströme Verwendung Archiv

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

statt

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

Der Code des (binär) Archiv für das Laden wie folgt aussieht:

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

die Dateien und walltimes für einen optimierten gcc-Build des obigen Code-Snippets sind:

  • ASCII-: 820MB (100%), 32,2 Sekunden (100%).
  • binär
  • : 620MB (76%), 14,7 Sekunden (46%).

Dies ist von einem Solid-State-Laufwerk, ohne Stream-Komprimierung.

So ist der Geschwindigkeitsgewinn ist größer als die Dateigröße würde vorschlagen, und Sie erhalten einen zusätzlichen Bonus binary verwenden.