Question

Je dois sérialiser un objet qui contient un std :: vecteur qui peut contenir des milliers de membres, avec ce vecteur tailles la sérialisation n'échelle pas bien.

D'après la documentation, Boost fournit une wrapper réseau de classe qui enveloppe le vecteur d'optimisations, mais il génère la même sortie xml. Plongée dans le code de boost, j'ai trouvé une classe nommée use_array_optimization qui semble contrôler l'optimisation, mais est désactivé en quelque sorte par défaut. J'ai aussi essayé de passer outre la fonction serialize sans résultat.

Je voudrais savoir comment activer les optimisations que depuis les documents à coup de fouet ne sont pas claires.

Merci d'avance

Était-ce utile?

La solution 2

Enfin, je l'BOOST_SERIALIZATION_SPLIT_MEMBER () macro et codifiés deux fonctions pour le chargement et l'enregistrement. La fonction Enregistrer ressemble:

template<class Archive>
void save(Archive & ar, const unsigned int version) const
{
    using boost::serialization::make_nvp;
std::string     sdata;
Vector2String(vData, sdata);
ar & boost::serialization::make_nvp("vData", sdata);
}

La fonction Vector2String prend simplement les données en format vectoriel et à un std :: string. La fonction de charge utilise une fonction qui inverse le codage.

Autres conseils

L'idée derrière l'optimisation du tableau est que, pour les tableaux de types qui peuvent être archivés par un simple « dumping » leur représentation en l'état à l'archive, le « dumping » tout le tableau à la fois est plus rapide que le « dumping » un élément après l'autre.

Je comprends votre question que vous utilisez l'archive xml. L'optimisation du tableau ne s'applique pas dans ce cas parce que la sérialisation des éléments implique une transformation de toute façon.

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