2011-04-22 6 views
3

Je dois sérialiser un OrderedDictionary, et j'en ai besoin rapidement. Je ne me soucie pas de la sécurité ou de la lisibilité humaine, j'ai juste besoin du moyen le plus rapide d'écrire le OrderedDictionary pour le lire et le relire, tant que la sérialisation est cohérente (même paire de paires clé-valeur, même contenu de fichier). BinaryFormatter est-il le meilleur choix?Sérialiseur C# le plus rapide

Répondre

4

BinaryFormatter est presque certainement le plus rapide des sérialiseurs intégrés, mais il ne serait pas très difficile de mesurer les alternatives et de vérifier.

+0

Vous devriez certainement regarder le lien de performance dans l'autre réponse aussi - mais pas * à la place * de faire vos propres tests. –

0

Si vous cherchez le meilleur moyen, le codage supplémentaire ne pas être un problème, vous pouvez essayer ceci:

sérialisation: 1. Écrivez vos données à un dictionnaire tableau d'octets en mémoire. En supposant que votre dictionnaire n'est pas trop grand, cela devrait être relativement bon marché, dans le temps. 2. Écrivez un petit en-tête contenant les enregistrements #, puis écrivez le tableau dans le fichier.

Désérialisez: 1. Lisez les # éléments et instanciez votre OrderedDictionary avec cela comme capacité. 2. Relire les données dans un tableau, instancier chaque objet et réécrire dans OrderedDictionary.

Je pense que ce ne sera pas beaucoup plus rapide que les méthodes plus traditionnelles, mais peut-être vaut la peine d'essayer si vous essayez de sortir chaque morceau de performance. Un moyen plus rapide serait d'écrire votre propre IOrderedDictionary avec une connaissance intime de vos objets, et de le stocker de manière optimisée pour une sérialisation rapide (par exemple un tampon plat qui peut être claqué sur le disque rapidement). Peut-être serait-il encore plus rapide d'utiliser un format de fichier d'indexation (peut-être SQLite?) Et d'y écrire un adaptateur IOrderedDictionary de mise en cache. Cela vous permettrait d'amortir le coût de la désérialisation.