Améliorer les performances de sérialisation: texte par rapport à un format binaire

StackOverflow https://stackoverflow.com/questions/1058051

  •  21-08-2019
  •  | 
  •  

Question

Dois-je préfère sérialisation binaire sérialisation ascii / texte si la performance est un problème?

Quelqu'un at-il testé sur une grande quantité de données?

Était-ce utile?

La solution

J'utilisé boost.serialization pour stocker des matrices et des vecteurs représentant les tables de recherche et des méta-données (chaînes) avec une taille mémoire d'environ 200MByte. IIRC pour le chargement de disque en mémoire il a fallu 3 minutes pour l'archive texte par rapport à 4 secondes en utilisant l'archive binaire sur Windows XP.

Autres conseils

étalonnées pour un problème impliquant le chargement d'un gros lots contenant la classe (en milliers) de classes archivées imbriquées.

Pour modifier le format, utiliser les flux d'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 construction 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 est d'un lecteur à état solide, sans aucune compression de flux.

Ainsi, le gain de vitesse est plus grande que la taille du fichier suggère, et vous obtenez un bonus supplémentaire à l'aide binaire.

Je vous suggère de regarder dans protobuf - Protocol Buffers si la performance est un problème

"Protocol Buffers" de .Net

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top