Benchmarked pour un problème impliquant le chargement d'une grande classe contenant des lots (milliers) de classes archivées imbriquées.
Pour modifier le format, les flux utilisation archives
boost::archive::binary_oarchive
boost::archive::binary_iarchive
au lieu de
boost::archive::text_oarchive
boost::archive::text_iarchive
Le code pour charger l'archive (binaire) ressemble à:
std::ifstream ifs("filename", std::ios::binary);
boost::archive::binary_iarchive input_archive(ifs);
Class* p_object;
input_archive >> p_object;
Les fichiers et walltimes pour une version gcc optimisée de l'extrait de code ci-dessus sont:
- ascii: 820MB (100%), 32,2 secondes (100%).
- binaire: 620MB (76%), 14,7 secondes (46%).
Ceci provient d'un lecteur à état solide, sans aucune compression de flux. Par conséquent, le gain en vitesse est supérieur à la taille du fichier et vous obtenez un bonus supplémentaire en utilisant binaire.
Sujet intéressant. Lisez ceci: http://stackoverflow.com/questions/4558382/boostserialization-high-memory-consumption-during-serialization –