Pergunta

tanto em termos de análise (serialização, desserialização) e envio de pacotes através da rede há alguma boa estimativa das diferenças de desempenho entre serialização binária e XML?

Foi útil?

Solução

Não.

Depende muito de que tipo de dados está dentro do próprio documento XML. Se você tem um monte de dados estruturados, a sobrecarga de XML será grande. Por exemplo, se a sua aparência de dados como:

<person>
  <name>Dave</dave>
  <ssn>000-00-0000</ssn>
  <email1>xxxxxx/email1>
</person>
...

Você vai ter muito mais sobrecarga do que se você tiver um documento XML que se parece com:

<book name="bible">
 In the beginning God created the heavens and the earth. 
 Now the earth was formless and empty ... 
 And if any man shall take away from the words of the book of this prophecy, God shall take away his part out of the book of life, and out of the holy city, and from the things which are written in this book. He which testifieth these things saith, Surely I come quickly. Amen. Even so, come, Lord Jesus.
</book>

Portanto, não é realmente uma pergunta justa. Ele depende muito dos dados que pretende enviar, e como / se você estiver comprimindo-o.

Outras dicas

A maior diferença entre BinaryFormatter e serialização XML é a portabilidade; BinaryFormatter é difícil de garantia entre as versões, por isso só é realmente adequado para o armazenamento de curto prazo ou de transferência.

No entanto, você pode obter o melhor de ambos, e tê-lo menor e ter mais rápido, usando bespoke serialização binária - e você não tem sequer a fazê-lo sozinho ;-p

protobuf-net é uma implementação .NET de buffers de protocolo do Google binário serialização de especificação ; é menor do que qualquer XmlSerializer ou BinaryFormatter, totalmente portátil (não apenas entre as versões - você pode carregar um fluxo pb em, por exemplo, java, etc), extensível, e rápido. Ele também é bastante abrangente testado, com um bom número de usuários.

A lista completa de tamanho e velocidade, cobrindo XmlSerializer, BinaryFormatter, DataContractSerializer e protobuf-net é aqui .

Instintivamente você gostaria de dizer que binário é mais eficiente, mas ele realmente depende dos dados que está sendo serializado.

Confira este artigo: http://www.nablasoft.com/alkampfer/index.php/2008/10/31/binary-versus-xml-serialization-size/

Apenas indicando o desempenho não é a única métrica que você pode querer olhar.

  • facilidade de construção. Você tem vários dias / semanas para construir uma rotina serialiser / deserialiser e testá-lo completamente ou poderia esse tempo ser melhor gasto em recursos.
  • A facilidade de consumir os dados. Pode um cliente utilizar um analisador de código aberto pré-construída ou eles precisam para implementar um monte de (potencialmente de buggy) Código si?
  • Facilidade de depuração. Vai ser capaz de visualizar os dados em ajuda de trânsito para depurar? Em seguida, um formato binário tendem a ofuscar quaisquer problemas.
  • O que é o custo de manutenção para cada método?

Pessoalmente, eu usaria um padrão XML publicados e de código aberto analisar bibliotecas até um gargalo de desempenho é comprovado pelo teste real.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top