【问题标题】:Serialization using Protobuf-net and Protobuf C#Port vs XML使用 Protobuf-net 和 Protobuf C#Port 与 XML 进行序列化
【发布时间】:2011-07-06 15:29:36
【问题描述】:

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

我正在做一个实验。我正在尝试查看切换 protobuf 库是否会对序列化和反序列化对象所需的时间产生任何影响。此外,我正在混合使用 XML 序列化,看看它是否也能竞争,尽管我很确定 protobuf 更快。

在速度方面,protobuf 和 XML 之间是否有明确的赢家?假设一切都始终如一地完成?即相同的路径、并行代码、直接等。而且,如果我切换 protobuf 用于序列化和反序列化的库,速度会受到影响吗? (从 protobuf-net 到 protobuf C# 端口?)我对此很陌生,所以我还不知道答案,但我听说 protobuf 应该比 XML 更小、更快、更容易。

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

【问题讨论】:

    标签: xml-serialization protobuf-net


    【解决方案1】:

    protobuf 会更快吗?绝对地。我已经分析过很多次了,结果都相似,例如:

    还有许多来自快乐用户的路过的 cmets。老实说,我很久没有与 Jon 的版本进行比较了,也没有直接比较 v2,但这里有一个关键点:在大多数情况下,最终带宽是网络的限制因素性能,它们是相同的线格式,所以在那里应该几乎相同。当然,protobuf 的读写成本也明显更低,但除非您使用的是次要的移动设备。

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

    【讨论】:

    • 非常感谢您提供的信息。一个当之无愧的答案。我也评论有趣的新闻。在我运行的测试中,Jon 的版本和您的版本相似,而且比 xml 快得多得多。我运行了一个 10000 次迭代的循环,protobuf 和 XML 之间的差异大约是 1.239 秒,而 protobuf 轻松取胜。无论我使用哪个库,无论是 Protobuf-net 还是移植版本,XML 序列化都没有机会。再次感谢马克!
    猜你喜欢
    • 2015-12-26
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    相关资源
    最近更新 更多