二进制和XML序列化之间是否存在任何性能差异?

时间:2008-12-27 02:45:33

标签: c# xml binary-data

在解析(序列化,反序列化)和通过网络发送数据包方面是否对二进制和xml序列化之间的性能差异有任何良好的估计?

4 个答案:

答案 0 :(得分:15)

不。

这在很大程度上取决于XML文档本身内部的数据类型。如果您有大量结构化数据,则XML的开销会很大。例如,如果您的数据如下:

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

如果你有一个类似的XML文档,你将会有更多的开销:

<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>

所以这不是一个公平的问题。它在很大程度上取决于您打算发送的数据,以及如何/如果您正在压缩它。

答案 1 :(得分:5)

BinaryFormatter和xml序列化之间的最大区别是可移植性; BinaryFormatter很难在版本之间保证,所以它只适用于短期存储或传输。

但是,您可以充分利用这两者,通过使用定制的二进制序列化使更快,并且您甚至不必亲自动手;-p

protobuf-net是Google协议缓冲区二进制序列化规范的.NET实现;它小于XmlSerializerBinaryFormatter完全可移植(不仅仅是版本之间 - 您可以加载pb流,例如,java等),可扩展,而且快。它也经过了相当全面的测试,拥有相当多的用户。

大小和速度的完整细分,涵盖XmlSerializerBinaryFormatterDataContractSerializer和protobuf-net为here

答案 2 :(得分:0)

本能地,你会想说二进制文件更有效,但它实际上取决于被序列化的数据。

查看此文章:http://www.nablasoft.com/alkampfer/index.php/2008/10/31/binary-versus-xml-serialization-size/

答案 3 :(得分:0)

只是指出性能并不是您可能想要查看的唯一指标。

  • 易于施工。您是否有几天/几周的时间来构建一个序列化程序/反序列化程序并对其进行彻底测试,或者最好将时间花在功能上。
  • 易于使用数据。客户端是否可以使用预先构建的开源解析器,或者他们是否需要自己实现一堆(可能有错误的)代码?
  • 易于调试。能够查看传输中的数据是否有助于调试?然后二进制格式将会混淆任何问题。
  • 每种方法的维护成本是多少?

就个人而言,我会使用已发布的XML标准和开源解析库,直到实际测试证明性能瓶颈为止。