Fastest serializer e desserializador com menor consumo de memória em C #?
Pergunta
Atualmente, estou usando o formatador binário (Remoting) para serializar e desserializar objetos para enviar ao redor da minha LAN.
Eu recentemente atualizado de 2,0 a .NET 3.5. Tem 3,5 introduziu novos tipos para melhorar o desempenho de serialização?
Eu olhei para o DataContractSerializer
, mas esta serializa nada ao subjacente direito XML ... o que deve aumentar o consumo de memória.
O que é o serializador mais rápido para o envio de objetos em toda a minha LAN? Eu não me importo a cerca de interoperabilidade ou versionamento .... Eu preciso de velocidade!
Estou aberto a terceiros alternativas de código aberto.
Solução
Parece Protocol Buffers pode ser o que você está procurando.
Há três implementações .NET que eu estou ciente de: protobuf-net , protobuf-csharp-port e Proto # .
comparações de desempenho mostram que Protocol Buffers superar o built-in serializers tanto em termos de tamanho e serialização velocidade / desserialização.
Outras dicas
Eu tenho alguns benchmarks para o líder .NET serializers disponíveis com base no conjunto de dados Adamastor.
@marcgravell binário protobuf-net é as implementações mais rápidas aferido que está prestes 7x mais rápido do que Microsoft serializer mais rápido disponível (o XML DataContractSerializer) na BCL.
JsonDataContractSerializer da Microsoft é muito lento - mais de 9x mais lento que protobuf-net e mais de 3,6x mais lento do que o meu próprio JsonSerializer .
Na desempenho comparação ligados por @Luke, aviso de que executa DataContractJsonSerializer
muito bem em comparação com os outros serializers MS.
Dada a onipresença do JSON, e a facilidade de que você pode usar DataContractJsonSerializer
, eu não vejo muita razão para usar "protocolo buffers". JSON será mais fácil de depurar quando saltando entre linguagens e plataformas, e ele irá comprimir muito bem.
(Eu amo como o Google leva CS 101 conceitos e torna-se famoso pela sua aplicação. Em C, que chamamos de "buffer de protocolo" "struct" s. Eles trabalham muito.)
Como eu demonstrei no esta resposta o código gerado pode ser a serializer mais rápido. No entanto, é em um estágio inicial e ainda carece de um par de características que outros serializers oferecem.