使用Protobuf-net和Protobuf C#Port vs XML进行序列化

时间:2011-07-06 15:29:36

标签: xml-serialization protobuf-net

我对某种情况感兴趣。我在C#中有一个对象,我想序列化和反序列化。

我正在进行一项实验。我试图看看切换protobuf库是否会影响序列化和反序列化对象所需的时间。另外,我正在混合使用XML序列化,看看它是否也可以竞争,即使我很确定protobuf更快。

就速度而言,protobuf和XML之间是否有一个清晰明确的赢家?假设一切都是一贯的吗?即相同的路径,并行代码,直截了当等。而且,如果我切换protobuf用于序列化和反序列化的库,速度会受到影响吗? (从protobuf-net到protobuf C#port?)我对此很新,所以我还不知道答案,但我听说protobuf应该比XML更小,更快,更容易。

非常感谢任何见解!谢谢!现在就开始编写测试。

1 个答案:

答案 0 :(得分:1)

protobuf会更快吗?绝对。我已经多次描述了这些,但都有类似的结果,例如:

许多来自快乐用户的评论。我很遗憾没有在很长一段时间内与Jon的版本进行比较,我没有进行直接的v2比较,但这里有一个关键点:在大多数情况下,最终带宽是网络的限制因素性能,它们是相同的线格式,所以应该是相同的。当然,protobuf 的读写也明显便宜,但除非您使用的是次要的移动设备。

protobuf-net和端口之间的最大区别在于移植版本(Jon的)采用(非常合理地)protobuf方法(不可变/生成的对象等),这可能很难改进现有的类型模型 - 你会必须引入一个单独的DTO图层并映射到它。这不是一个大问题 - 只是一个考虑因素。因此,您可能会发现很难在XmlSerializer和端口之间进行直接比较;他们都得到你的数据,但路线是非常不同的。相反,protobuf-net故意将自己定位为与XmlSerializer等非常相似的API,因此使用相同的对象进行测试套件非常容易 - 只需更改序列化器。