2009-06-29 7 views

Répondre

13

je boost.serialization pour stocker des matrices et des vecteurs représentant des tables de consultation et des méta-données (chaînes) avec une taille de mémoire d'environ 200MByte. IlRC pour le chargement de disque dans la mémoire, il a fallu 3 minutes pour l'archive de texte contre 4 secondes en utilisant l'archive binaire sur WinXP.

+0

3 minutes sonne ... inexplicablement lent. Ce n'étaient pas des types de POD :) – sehe

1

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.