2009-03-09 14 views
14

Actualmente estoy usando el formateador binario (Remoting) para serializar y deserializar objetos para enviarlos a través de mi LAN.El serializador y deserializador más rápido con la huella de memoria más baja en C#?

Recientemente me he actualizado de 2.0 a .NET 3.5. ¿3.5 introdujo algún tipo nuevo para mejorar el rendimiento de serialización?

He visto el DataContractSerializer, pero esto serializa cualquier cosa al XML subyacente correcto ... lo cual debe aumentar la huella de memoria.

¿Cuál es el serializador más rápido para enviar objetos a través de mi LAN? No me importa una interoperabilidad o control de versiones ... ¡Necesito velocidad!

Estoy abierto a las alternativas de código abierto de terceros.

+0

Parece que hay dos preguntas aquí ... La serialización más rápida es una, la otra es la serialización con la huella más baja de la memoria. –

+0

@Mauricio: siempre es una cuestión de equilibrio. Normalmente busca el óptimo entre las dos cualidades, por lo que considera ambas al mismo tiempo. –

+0

posible duplicado de [La forma más rápida de serializar y deserializar el objeto .NET] (http://stackoverflow.com/questions/4143421/fastest-way-to-serialize-and-deserialize-net-object) – nawfal

Respuesta

8

Parece que Protocol Buffers podría ser lo que estás buscando.

Existen tres implementaciones de .NET que conozco: protobuf-net, protobuf-csharp-port y Proto#.

El performance comparisons muestra que los búferes de protocolo superan a los serializadores incorporados en términos de tamaño y velocidad de serialización/deserialización.

+6

¿Cuál es la diferencia entre estos tres implementaciones .NET? –

+1

@StefanSteinegger Son implementaciones diferentes de protobuf, por diferentes desarrolladores.En cuanto a la situación actual: parece que proto # ha desaparecido, tanto protobuf-net como protobuf-csharp-port han sido implementados por excelentes desarrolladores. Los enlaces correctos son https://github.com/mgravell/protobuf-net y https://github.com/jskeet/protobuf-csharp-port. – atlaste

2

En el performance comparison vinculado por @Luke, observe que DataContractJsonSerializer funciona muy bien en comparación con los otros serializadores de MS.

Dada la ubicuidad de JSON, y la facilidad con la que puede usar DataContractJsonSerializer, no veo muchas razones para usar "búferes de protocolo". JSON será más fácil de depurar al rebotar entre idiomas y plataformas, y se comprime maravillosamente.

(Me encanta como Google toma CS 101 conceptos y se convierte en famoso por su ejecución. En C, que llamamos "búfer de protocolo" "struct" s. Funcionan muy bien.)

+0

C estructuras (o C++ en mi caso) sería genial, pero .Net (como lo requiere OP) y Java no serializan solo los datos de la estructura, también serializan la definición de estructuras a un punto. Además, el búfer de protocolo permite agregar _ "nuevos campos a sus formatos de mensaje sin romper la compatibilidad hacia atrás;" _ [consulte la Guía del desarrollador] (https://developers.google.com/protocol-buffers/docs/overview). – Trisped

5

tengo algo de benchmarks for the leading .NET serializers basadas disponible en el conjunto de datos Northwind.

@marcgravell binaria protobuf-net es las implementaciones más rápidas como punto de referencia que se trata de 7x más rápido que Microsoft serializador más rápida disponible (el XML DataContractSerializer) en el BCL.

JsonDataContractSerializer de Microsoft es bastante lento - sobre 9x más lenta que protobuf-net y sobre 3.6x más lento que mi propia JsonSerializer.

+0

¿Qué hay de la biblioteca de Simon Hewitt? Consulte * [Optimización de la serialización en .NET - parte 2] (http://www.codeproject.com/dotnet/OptimizingSerialization2.asp) * o * [¿Cómo serializar objetos grandes en .NET?] (Http: // stackoverflow. com/questions/709399/how-to-serialize-big-objects-in-net-outofmemory-exceptions/1290530 # 1290530) *. –

0

Como demostré en this answer, el código generado podría ser el serializador más rápido. Sin embargo, está en una etapa inicial y todavía carece de algunas características que ofrecen otros serializadores.

Cuestiones relacionadas