Domanda

Attualmente sto usando il formattatore binario (Remoting) per serializzare e deserializzare gli oggetti da inviare sulla mia LAN.

Ho recentemente aggiornato da 2.0 a .NET 3.5. 3.5 ha introdotto nuovi tipi per migliorare le prestazioni di serializzazione?

Ho esaminato il DataContractSerializer , ma questo serializza qualsiasi cosa sul diritto XML sottostante ... che deve aumentare il footprint di memoria.

Qual è il serializzatore più veloce per l'invio di oggetti attraverso la mia LAN? Non mi interessa un interoperabilità o il controllo delle versioni .... Ho bisogno di velocità!

Sono aperto a alternative open source di terze parti.

È stato utile?

Soluzione

Sembra che Buffer di protocollo potrebbe essere quello che stai cercando.

Esistono tre implementazioni .NET di cui sono a conoscenza: protobuf-net , protobuf-csharp-port e Proto # .

I confronti di prestazioni mostrano che i buffer di protocollo superano quelli integrati serializzatori in termini di dimensioni e velocità di serializzazione / deserializzazione.

Altri suggerimenti

Ho alcuni benchmark per il principale .NET serializzatori disponibili in base al set di dati Northwind.

@marcgravell binary protobuf-net è l'implementazione più veloce analizzata che è circa 7x più veloce del serializzatore più veloce disponibile di Microsoft (XML DataContractSerializer) nel BCL.

JsonDataContractSerializer di Microsoft è piuttosto lento - rispetto a 9x più lento di quel protobuf-net e oltre 3,6x più lento del mio JsonSerializer .

Nel confronto delle prestazioni collegato da @Luke, nota che DataContractJsonSerializer funziona molto bene rispetto agli altri serializzatori MS.

Data l'ubiquità di JSON e la facilità con cui è possibile utilizzare DataContractJsonSerializer , non vedo molte ragioni per usare " buffer di protocollo " ;. JSON sarà più facile da eseguire il debug quando si rimbalza tra lingue e piattaforme e si comprimerà magnificamente.

(Adoro il modo in cui Google prende i concetti di CS 101 e diventa famoso per implementarli. In C, chiamiamo "buffer di protocollo" e "struct". Funzionano alla grande.)

Come ho dimostrato in questa risposta il codice generato potrebbe essere il serializzatore più veloce. Tuttavia è in una fase iniziale e manca ancora un paio di funzionalità che offrono altri serializzatori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top