2009-03-09 14 views
14

Attualmente sto usando il formattatore binario (Remoting) per serializzare e deserializzare oggetti per l'invio intorno alla mia LAN.Serializzatore e deserializzatore più veloci con un minore ingombro di memoria in C#?

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

Ho guardato il DataContractSerializer, ma questo serializza qualsiasi cosa a destra XML sottostante ... che deve aumentare il footprint di memoria.

Qual è il serializzatore più veloce per l'invio di oggetti sulla mia LAN? Non mi interessa l'interop o il versioning ... Ho bisogno di velocità!

Sono aperto a alternative open source di terze parti.

+0

Sembra che ci siano due domande qui ... La serializzazione più veloce è una, l'altra è la serializzazione con il footprint più basso. –

+0

@Mauricio: È sempre una questione di equilibrio. Normalmente stai cercando l'optimum tra le due qualità, quindi prendi in considerazione entrambi allo stesso tempo. –

+0

possibile duplicato di [Modo più rapido per serializzare e deserializzare oggetto .NET] (http://stackoverflow.com/questions/4143421/fastest-way-to-serialize-and-deserialize-net-object) – nawfal

risposta

8

Suona come Protocol Buffers potrebbe essere quello che stai cercando.

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

Il performance comparisons mostra che i buffer di protocollo superano i serializzatori integrati in termini di dimensioni e velocità di serializzazione/deserializzazione.

+6

Che differenza c'è tra questi tre implementazioni .NET? –

+1

@StefanSteinegger Sono diverse implementazioni di protobuf, da parte di diversi sviluppatori.Per quanto riguarda la situazione ora: il proto # sembra essere svanito, sia protobuf-net che protobuf-csharp-port sono stati implementati da eccellenti sviluppatori. I collegamenti corretti sono https://github.com/mgravell/protobuf-net e https://github.com/jskeet/protobuf-csharp-port. – atlaste

2

Nel performance comparison collegato da @Luke, notare 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 molti motivi per utilizzare "buffer di protocollo". JSON sarà più facile eseguire il debug durante il bouncing tra lingue e piattaforme e si comprimerà in modo bello.

(Mi piace come Google prende CS 101 concetti e diventa famoso per la loro attuazione. In C, che noi chiamiamo "buffer di protocollo" "struct" s. Grande lavoro.)

+0

Le strutture C (o C++ nel mio caso) sarebbero grandiose, ma .Net (come richiesto da OP) e Java non serializzano solo i dati della struttura, inoltre serializzano la definizione delle strutture in un punto. Inoltre, il protocollo buffer consente di aggiungere _ "nuovi campi ai formati dei messaggi senza compromettere la compatibilità con le versioni precedenti" _ [consultare la Guida per gli sviluppatori] (https://developers.google.com/protocol-buffers/docs/overview). – Trisped

5

ho qualche benchmarks for the leading .NET serializers disponibili sulla base di il set di dati Northwind.

@marcgravell binario protobuf-net è più veloci implementazioni benchmark che è circa 7 volte più veloce di Microsoft più veloce serializzatore disponibile (il XML DataContractSerializer) nel BCL.

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

+0

E la biblioteca di Simon Hewitt? Vedere * [Ottimizzazione della serializzazione in .NET - parte 2] (http://www.codeproject.com/dotnet/OptimizingSerialization2.asp) * o * [Come serializzare grandi oggetti in .NET?] (Http: // stackoverflow. com/domande/709399/how-to-serializzare-big-oggetti-in-net-OutOfMemory-eccezioni/1.290.530 # 1.290.530) *. –

0

Come ho dimostrato in this answer il codice generato potrebbe essere il serializzatore più veloce. Tuttavia è in una fase iniziale e manca ancora un paio di funzionalità offerte da altri serializzatori.

Problemi correlati