2010-10-25 13 views
1

J'ai besoin de sérialiser la structure C/C++ dans une chaîne binaire, très rapide.C/C++ Serialize Rapide: Boost vs Cpickle vs JSON vs tampon de protocole

Env = Windows, Boost 1,44, Python 2.4.

Nous avons 3 structures: sérialiser à differents de base: int, double, long, float, string (ou char *) Vector: - Chaque élément peut être: Basic ou vecteur ou une carte -> vecteur < de base, vecteur, Carte>
Carte: - Chaque élément de valeur peut être: Basic ou vecteur ou une carte -> Cartographique Liste ou carte>

J'essaie avec cPickle de sérialisation structures CPython définir comme au dessus. Temps sérialiser: 1,5 s j'essayer la même chose avec boost 1,44 avec différentes classes: - avec polymorphisme (pointeur) et la fonction virtuelle -> 35 s - avec boost :: variante -> 7s

Je ne peux pas expliquer comment la différence entre Boost et Cpickle est trop grande. Je note, le temps de serialize de boost pour sérialiser un vecteur et un vecteur est un facteur 10. (TimeSerialize (vector) = 10 * TimeSerialize (vector) Donc mon idée, était d'utiliser boost :: variant pour éviter le pointeur. lent.

Je n'ai pas essayé protocole tampon et JsonCpp. J'essaie de développ tout en C++ et ne pas utiliser Python. Mais pour l'instant Python est 5 plus rapide que C++ pour la sérialisation.

Si quelqu'un peut aidez-moi

+0

Avez-vous activé l'optimisation du compilateur (par exemple, -O2) et le débogage désactivé (par exemple, non -g)? –

+0

Si Python est plus rapide: utilisez Python! – pmg

Répondre

1

Les objectifs de conception de Boost n'incluent pas le fait d'être le plus rapide, je pense que protobuf serait plus rapide mais plus difficile à utiliser. juste fait le code de sérialisation pour mon propre projet. J'ai fait quelque chose de similaire à ce qui a été implémenté dans MFC. C'est raisonnablement rapide sans beaucoup de frais généraux. Si vous avez vraiment besoin de vitesse rouler votre propre comme this.

+0

Je n'ai pas implémenté mon propre sérialiseur, mais cela me semble le meilleur. – Eric

+0

Si quelqu'un pouvait m'aider pour ça. – Eric