Google Protobuf est un excellent protocole pour sérialiser les objets efficaces, mais ce n'est que Il y a peu de mise en œuvre de Google Idée dans .NET. (c'est-à-dire protocoudf-csharp-port ou protoVARP ), mais le plus intéressant est protobuf-net . p>
Protobuf-Net est meilleur parce que son architecture s'adapte, à .Net World, et a plusieurs add-ins forts> (pas toujours compatible avec les protobuf originaux, mais très utile). P>
Un de ce complément est la possibilité d'activer le suivi de référence (option d'asreférence), ce qui permet de sérialiser des graphiques complexes même avec des cycles. p>
Protobuf-Net V2 inutile est en version bêta et L'option d'asreférence ne fonctionne pas dans des scénarios réels mondiaux forts>. (Sans cette option, tout fonctionne bien, mais sans référence, Tracikng Protobuf-Net n'est pas capable de sérialiser des graphiques et n'est plus sérialisé attrayant). P>
Il a toujours des bugs: p>
Donc, je ne peux pas utiliser ce grand outil, et je recherche un sérialiseur alternatif qui: p>
3 Réponses :
Nous envisageons MessagePack . Ils prétendent être 4X plus rapides que ProTobuf. Cependant, je ne sais pas s'il prend en charge les graphiques d'objets complets. (Nous n'avons pas cette condition, nous aplatirons réellement les objets que nous utilisons pour la communication) Dans mon scénario, je l'utiliserais pour la communication entre une couche .NET et une couche Delphi (et c'est aussi ce qui me retient, pas de support Delphi :)) P>
La revendication de vitesse est franchement fausse; J'ai posté une comparaison et je n'ai jamais eu de réponse
Je suis intéressé par la comparaison, je ne pouvais pas le trouver sur votre blog. Y a-t-il un endroit où je peux le regarder?
@COHEN - J'ai vérifié - MessagePack Ne pas prendre en charge l'héritage des objets b>
Bartosz, tandis que cette question est assez ancienne, je pourrais vous recommander de vous recommander et quiconque les mouche dessus pour utiliser Migrant A >, disponible à partir de la source et de package Nuget . Je suis l'un des co-auteurs.
Il peut être facilement adopté pour même des scénarios compliqués, nous avons essayé de le rendre aussi facile à utiliser possible. P>
La taille de la sortie est raisonnablement petite. Cela dépend de votre arbre d'objet, bien sûr, mais il peut être comparable à Protobuf-Net. Comme protobuf, il utilise un codage de Varint et de zigzag. p>
Bien sûr, le migrant résout les problèmes que vous avez mentionnés - il conserve l'ensemble des graphiques d'objets, gère l'héritage, les collections complexes, la tolérance de la version (jusqu'à un certain point), etc. P>
Conditions de la rapidité Nous essayons d'être comparables avec Protobuf-Net. Il prend en charge la dés / la sérialisation à l'aide de méthodes générées dynamiquement, ce qui est beaucoup plus rapide que des solutions à base de réflexion classique. P>
Scénarios d'utilisation simples sont disponibles sur le site que j'ai lié, mais le clonage d'objet simple est simple. . p> écrire dans le flux est aussi simple. p> Bien sûr, pour des types très compliqués, il existe un ensemble de décorateurs de classe (attributs, crochets) faire des choses encore plus intelligentes; -) p> p>
Je soulève la suggestion de Piotr à jeter un coup d'oeil au migrant. Dans mes tests, cela me donne de meilleurs résultats de performance que toutes les autres bibliothèques de sérialisation que j'ai essayé et à ce stade, j'ai essayé la plupart d'entre eux. De plus, je travaille à la contribution des fonctionnalités manquantes de la bonne voie OLS OTOS de l'apporter à pair avec Binaryformatter et NetDataContractSérialiseur en termes de fonctionnalités.
Et nous sommes reconnaissants pour ça! :) Tout le monde est invité à collaborer!
Il pourrait être en retard pour répondre à cette question spécifique maintenant, mais je le posterai ici pour une personne qui pourrait rechercher la même chose car le suivi de référence est toujours brisé dans Protobuf-net. P>
Vous pouvez utiliser une fourchette: Aqlaserializer . Il a beaucoup plus d'améliorations que de simples suivis de référence: P>
et beaucoup d'autres. p>
Disclaimer: Je suis l'auteur de celui-ci. P>
De celles; Le numéro 232 est identique à SO 7219959 (c'est-à-dire pas un problème - juste une question, avec une réponse); SO 6294295 a une bonne réponse (c'est-à-dire pas un problème - juste une question, avec une réponse); Les 3 autres concernent le mélange d'une asreférence et d'une héritage (ils sont essentiellement des doublons). Donc, cela revient vraiment à: Avez-vous besoin de celles en combinaison! Je serais intrigué de voir votre scénario du monde réel
Ainsi, 6294295 - J'ai expliqué en commentaire, que ProTobuf-Net ne conserve pas les références de la liste, mais uniquement des références d'éléments. Scénario du monde réel J'ai décrit dans le numéro 242. Je ne comprends pas pourquoi les références ne sont que correctement préservées lorsque l'objet n'a aucun héritage.
(Listes) Si tel est votre plus grand barrière, je peux soutenir ce scénario - il s'agit simplement d'obtenir le temps de le faire (d'autres demandes de mon temps, etc.). Est-ce le problème principal?
(héritage) Je ne peux pas commenter que cela sans le regarder plus (bien sûr, prend du temps)
@MARC, ne le prenez pas personnellement, l'outil Open Source et le travail que vous avez fait est génial. Mais nous parlons de ce que Protobuf-Net est maintenant, pas de ce que cela pourrait être à l'avenir. Maintenant, Protobuf-Net ne prend pas en charge correctement le suivi de référence et n'a pas pu être considéré comme un remplacement pour les sérialisées qui le supporte. Il y a des informations sur le site du projet principal: "J'ai également ajouté une gamme de fonctionnalités communément demandées au-delà de la conception régulière des protobuf, afin de répondre aux demandes de tous les jours de programmeurs .NET (héritage, suivi de référence, etc.) . " i> Ce n'est pas vrai pour la version actuelle. Les gens devraient savoir ..
Oh, je ne suis pas offensé; P Il y a toujours plus que peut être fait et les modifications apportées ont satisfait beaucoup de scénarios demandés. J'essayais simplement de comprendre vos barrières les plus pressantes, de voir si la jonglerie ma liste de priorités aurait pu aider.
Je suggère de modifier des informations sur le site du projet pour ne pas induire d'erreur d'autres utilisateurs et dire clairement ce que Protobuf-Net V2 Beta est, et ce qu'il peut faire maintenant b>. Peut-être devriez-vous dire que Certaines fonctionnalités sont expérimentales maintenant b>? Il devrait également être des informations claires, que tous les tests de performance ont été effectués sans utiliser ces fonctionnalités expérimentales b>. Je chercherai de nouvelles sorties et garder mes doigts croisés. S'il vous plaît considérer pour permettre aux autres personnes de contribuer au projet. Ça vaut le coup.