c#中的二进制序列化:结果大小和性能

时间:2013-12-16 11:42:10

标签: c# serialization xsd

我正在努力理解并决定解决问题的最佳方法。 我有一个xsd代表我与客户达成一致的信息架构。

现在,在我的应用程序(c#,。net3.5)中,我使用并使用了一个已根据xsd模式创建的xml反序列化的对象。

只要我用数据填充对象,我想将它传递给另一个应用程序并将其存储在数据库中。我有两个问题:

  1. 我想将对象序列化以快速传递给其他应用程序:更好的二进制或xml序列化?
  2. 不幸的是在db中我有一个有限大小的字段来存储信息,所以我需要对序列化对象进行一种压缩。二进制序列化创建较小的数据然后xml序列化或我在任何情况下需要压缩这些数据?如果有,怎么样?
  3. 谢谢!

1 个答案:

答案 0 :(得分:2)

  

我想将对象序列化以快速传递给其他应用程序:更好的二进制或xml序列化?

两者都不够具体;二元可以是好的还是坏的; xml可以是好的也可以是坏的。一般来说,二进制文件更小,处理速度更快,但是对于需要xml的代码,更改为二进制文件将无法使用。

  

二进制序列化会创建比xml序列化更小的数据,或者我在任何情况下都需要压缩这些数据?

可以更小;或可以更大;实际上,压缩也可以使事情变得更小或更大。

如果空间是您最关心的问题,我建议您通过protobuf-net(二进制序列化程序,没有BinaryFormatter常见的版本控制问题)运行它,然后推测尝试压缩它与GZipStream。如果压缩版本较小:存储(和标记 - 可能是序言 - 说“我被压缩”)。如果压缩版本大于原始版本,请存储原始版本(再次使用前导码)。

以下是常见.NET序列化程序的性能(速度和大小)的最新细分:http://theburningmonk.com/2013/09/binary-and-json-serializer-benchmarks-updated/