代码之家  ›  专栏  ›  技术社区  ›  Laserallan

C++序列化性能

  •  21
  • Laserallan  · 技术社区  · 17 年前

    我正在构建一个分布式C++应用程序,它需要对在不同进程和计算机之间传递的简单数据结构进行大量序列化和反序列化。

    我担心基于文本/xml的方法速度太慢,我真的不想自己写这篇文章,因为像字符串编码和数字结尾这样的问题会使它比表面上看起来更复杂。

    我一直在研究协议缓冲区和boost.serialize。根据文档,协议缓冲区似乎非常关心性能。

    所以我的问题归结为:有人知道对于我上面描述的典型用例,boost序列化是否快速吗?

    8 回复  |  直到 17 年前
        1
  •  14
  •   Bill    17 年前

    我强烈建议使用协议缓冲区。它们的使用非常简单,提供了出色的性能,并解决了诸如端性和向后兼容性等问题。为了使其更具吸引力,由于有许多语言实现,序列化数据与语言无关。

        2
  •  4
  •   Tim    17 年前

    我想到了ACE和ACE TAO,但你可能不喜欢它的大小和范围。 http://www.cs.wustl.edu/~schmidt/ACE.html

    关于您对“fast”和boost的疑问。这是一个主观的术语,在不了解您的需求(吞吐量等)的情况下,您很难回答这个问题。并不是说我自己也有任何提升的基准。。。

        3
  •  3
  •   Community Mohan Dere    9 年前

    猜测 这一增长速度足够快。我在以前的项目中使用过它来序列化磁盘之间的数据,它的性能甚至从来没有出现过问题。

    我的 answer

    话虽如此,您似乎知道序列化(endianess字符串编码)的大多数主要问题点。您确实忽略了版本控制和向前/向后兼容性。如果时间不紧迫,我建议您编写自己的序列化代码。这是一次启发性的经历,你学到的教训是无价的。尽管我会警告您,这会让您讨厌基于XML的协议,因为它们过于臃肿

    无论你选择哪条道路,祝你的项目好运。

        4
  •  3
  •   Malkocoglu    17 年前
        5
  •  2
  •   unwesen unwesen    17 年前

    序列化不关心字符串编码或endianness。如果这对你很重要的话,你不使用它也会同样富裕。

    您可能需要从ZeroC查看ICE: http://www.zeroc.com/

    它的工作原理与CORBA类似,只是它完全由公司指定和定义。好处是这些实现可以按预期工作,因为没有那么多。缺点是,如果你使用的是他们不支持的语言,那你就倒霉了。

        6
  •  2
  •   Peter M    17 年前

    ASN.1 作为一种编码方法?

        7
  •  1
  •   gbjbaanb    17 年前

    Thrift ,它看起来像一个alpha项目,但由Facebook使用和开发,因此它有一些用户。

    DCE

        8
  •  0
  •   plinth    17 年前

    不要先发制人地优化。先测量后优化。