Sérialiseur et désérialiseur le plus rapide avec la plus petite empreinte mémoire en C #?

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

Question

J'utilise actuellement le formateur binaire (Remoting) pour sérialiser et désérialiser des objets afin de les envoyer sur mon réseau local.

Je suis récemment passé de 2.0 à .NET 3.5. 3.5 a-t-il introduit de nouveaux types pour améliorer les performances de la sérialisation?

J'ai consulté DataContractSerializer , mais cela sérialise tout ce qui se trouve sous le droit XML sous-jacent & # 8230; qui doit augmenter l’empreinte mémoire.

Quel est le sérialiseur le plus rapide pour envoyer des objets sur mon réseau local? Je ne me soucie pas de l’interopérabilité ni du contrôle de version & # 8230 ;. J'ai besoin de vitesse!

Je suis ouvert aux alternatives tierces open source.

Était-ce utile?

La solution

Il semble que les tampons de protocole soient peut-être ce que vous recherchez.

À ma connaissance, il existe trois implémentations .NET: protobuf-net , protobuf-csharp-port et Proto # .

Les comparaisons de performances montrent que les tampons de protocole surpassent les performances intégrées. sérialiseurs en termes de taille et de vitesse de sérialisation / désérialisation.

Autres conseils

J'ai des références pour le leader .NET sérialiseurs disponibles en fonction du jeu de données Northwind.

@marcgravell binary protobuf-net est l’implémentation la plus rapide qui soit 7x plus rapide que le sérialiseur le plus rapide de Microsoft disponible (XML DataContractSerializer) dans la BCL.

Le JsonDataContractSerializer de Microsoft est assez lent: plus de 9x que Protobuf-Net et plus de 3.6x que mon propre JsonSerializer .

Dans la comparaison de performances associée à @Luke, notez que DataContractJsonSerializer fonctionne très bien par rapport aux autres sérialiseurs MS.

Étant donné l'omniprésence de JSON et la facilité avec laquelle vous pouvez utiliser DataContractJsonSerializer , je ne vois pas beaucoup de raisons d'utiliser les "tampons de protocole". JSON sera plus facile à déboguer lorsqu’il rebondira entre les langages et les plates-formes, et il compressera magnifiquement.

(J'adore la façon dont Google utilise les concepts de CS 101 et est célèbre pour les implémenter. En C, nous appelons les "mémoires tampons de protocole". Elles fonctionnent parfaitement.)

Comme je l'ai démontré dans cette réponse , le code généré pourrait être le sérialiseur le plus rapide. Cependant, il en est encore à ses débuts et il manque encore quelques fonctionnalités que d’autres sérialiseurs offrent.

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