Frage

Sind Protocol Buffer für .NET würde leicht sein / schneller als Remoting (die SerializationFormat.Binary)? Wird es für sie in der Sprache / framework Bedingungen eine erstklassige Unterstützung sein? das heißt es ist transparent wie mit Remoting / WebServices?

behandelt
War es hilfreich?

Lösung

Ich bezweifle sehr, dass es jemals direkte Sprachunterstützung hat oder sogar Rahmen Unterstützung -. Es die Art von Sache, die mit 3rd-Party-Bibliotheken sehr gut gehandhabt wird,

Meine eigene Port des Java-Code ist explizit - Sie müssen rufen Methoden zur Serialisierung / deserialisieren. (Es gibt RPC-Stubs, die automatisch serialisieren / deserialisieren, aber keine RPC-Implementierung noch.)

Marc GRA Projekt in allerdings sehr gut mit WCF passt - soweit ich sind bewusst, die Sie gerade sagen, es müssen (einmal) Protokollpuffer für die Serialisierung zu verwenden, und der Rest ist transparent.

In Bezug auf Geschwindigkeit, sollte man sich Marc GRA Benchmark Seite . Mein Code neigt dazu, etwas schneller als seine sein, aber beide sind viel, viel schneller als die andere Serialisierung / Deserialisierung Optionen im Rahmen. Es sollte darauf hingewiesen werden, dass Protokollpuffer sind viel mehr als auch begrenzt - sie nicht versuchen, beliebige Typen serialisiert wird, nur die unterstützt diejenigen. Wir werden versuchen, mehr von den gemeinsamen Datentypen (dezimal, Datetime, etc.) in einer tragbaren Weise (als ihre eigenen Protokoll Puffer-Nachrichten) in Zukunft zu unterstützen.

Andere Tipps

Einige Leistung und Größe Metriken sind auf diese Seite . Ich habe nicht Jons Statistiken dort im Moment bekam, nur weil die Seite ein wenig alt ist (Jon: Wir müssen das in Ordnung bringen).

Re transparent; protobuf-net können über den Vertrag in WCF Haken; beachten Sie, dass es schön mit MTOM über basic-http auch spielt. Das funktioniert nicht mit Silverlight, obwohl, da Silverlight die Injektionsstelle fehlt. Wenn Sie svcutil verwenden, müssen Sie auch ein Attribut Klasse (über eine Teilklasse).

hinzufügen

Re BinaryFormatter (Remoting); ja, hat diese voll supprt; Sie kann durch eine triviale ISerializable Implementierung dies einfach tun (das heißt rufen Sie die Serializer Methode mit den gleichen args). Wenn Sie protogen verwenden Ihre Klassen zu erstellen, dann kann es es für Sie tun: Sie dies in der Befehlszeile über Argumente ermöglichen kann (es ist nicht standardmäßig aktiviert ist als BinaryFormatter nicht auf allen Frameworks funktioniert [CF, etc.]) .

Beachten Sie, dass für sehr kleine Objekte (Einzel Instanzen usw.) auf lokaler Remote (IPC), die rohe BinaryFormatter Leistung ist eigentlich besser - aber für nicht-triviale Graphen oder Remote-Verbindungen (Netzwerk Remote) protobuf-Netz kann aus-führen es ziemlich gut.

Ich sollte auch beachten, dass das Protokoll Puffer Draht Format nicht direkt Vererbung ist; protobuf-net kann fälschen diese (unter Beibehaltung Draht-Kompatibilität), aber wie mit XmlSerializer, müssen Sie die Unterklassen up-front erklären.


Warum gibt es zwei Versionen?

Die Freuden der Open-Source, ich denke, ;-p Jon und ich habe vor an gemeinsamen Projekten gearbeitet und diskutiert diese beiden fusionierenden, aber die Tatsache ist, dass sie Ziel zwei verschiedene Szenarien:

  • Dotnet-protobufs (Jon) ist eine Portierung der bestehenden Java-Version . Das bedeutet, es eine sehr vertraute API für alle, hat bereits die Java-Version, und es wird auf typische Java-Konstrukten (Builder-Klassen, unveränderliche Datenklassen, etc.) gebaut -. Mit einigen C # Drehungen
  • protobuf-net (Marc) ist eine Boden-up Neuimplementierung folgende das gleiche Binärformat (in der Tat eine entscheidende Voraussetzung ist, dass Sie Daten zwischen verschiedenen Formaten austauschen können), aber typische .NET Idiome mit:
    • änderbare Datenklassen (keine Builder)
    • die Serialisierung Mitglied Spezifika sind in Attributen (vergleichbar mit XmlSerializer, DataContractSerializer, etc)
    • ausgedrückt

Wenn Sie auf Java und .NET-Clients arbeiten, Jons ist wahrscheinlich eine gute Wahl für die vertraute API auf beiden Seiten. Wenn Sie reine .NET protobuf-net hat Vorteile sind - der vertrauten .NET Stil API, aber auch:

  • Sie sind nicht gezwungen sein vertrags erste (obwohl Sie können, und ein Code-Generator geliefert wird)
  • Sie können Ihre bestehenden Objekte wiederverwenden (in der Tat, [DataContract] und [XmlType] Klassen oft überhaupt ohne Änderungen verwendet werden)
  • hat es volle Unterstützung für die Vererbung (die durch Spoofing Verkapselung auf dem Draht erreicht) (möglicherweise einzigartig für eine Protokollpuffer Implementierung? Beachten Sie, dass Unterklassen im Voraus zu erklären haben)
  • es aus dem Weg geht in Plug-and-Kern .NET Tools (BinaryFormatter, XmlSerializer, WCF, DataContractSerializer) ausnutzen - so dass sie direkt als Remote Motor arbeiten. Dies würde vermutlich ein ziemlich große Spaltung von der Haupt java Rüssel-Port für Jon sein.

Re verschmelzenden ihnen; Ich denke, wir beide es offen sein würde, aber es scheint unwahrscheinlich, dass Sie würden beide Sets kennzeichnen wollen, da sie so unterschiedliche Anforderungen ausrichten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top