【问题标题】:Wire protocol buffers vs Cap'n proto - which one is better?Wire protocol buffers 与 Cap'n proto 哪个更好?
【发布时间】:2015-06-15 17:15:30
【问题描述】:

我目前在我的一个 android 应用程序中使用有线协议缓冲区,看起来它的 parseFrom() 方法效率不高,因为即使解析非常少量的数据也需要大约 10 毫秒。

所以我遇到了这个:https://capnproto.org/index.html

有谁知道这两个协议缓冲区之间的主要区别是什么,主要是在性能和​​功能方面?

【问题讨论】:

    标签: android capnproto protocol-buffers


    【解决方案1】:

    “Wire Protocol Buffers”只是 Protocol Buffers 的另一种实现。 Cap'n Proto 是一种完全不同的、不兼容的格式。 Cap'n Proto 网站有很多文字说明它与 Protocol Buffers 的不同之处。 Cap'n Proto 的主要问题是它不够成熟或没有被广泛使用。

    如果你发现一个 protobuf 解析器需要 10ms 来解析少量的数据,那很可能还有其他问题。通常,它应该能够在那段时间内解析大约 1 兆字节或更多。

    【讨论】:

    • 有道理。我检查了一些东西,看起来带有扩展数据的 protobuf 消息解析可能比其中没有扩展数据的消息要花费更多时间来解析。我可能错了,但这是我目前观察到的行为。
    • 由于增加了抽象,扩展确实需要更多的 CPU,尽管是基于每个扩展。也就是说,如果您有一个包含大量数据的扩展子消息,那应该没问题;如果你有大量单独的扩展,那么它会很慢,是的。
    • 知道这一点真的很有用。您的回答为我指明了正确的方向,我能够找出问题所在。我做了更多调查,并在下面发布了答案。
    【解决方案2】:

    对我来说,问题是每次解析消息时都会创建 Wire 实例。

    // Sample code 
    Wire wireObj = new Wire(<extension>);
    output = wireObj.parseFrom(<buffer>, <extension>);
    

    事实证明,如果每次需要解析消息时都创建一个 Wire 实例,那么它很耗时。但是,如果您只创建一次并将其重用于所有其他解析请求,则所需时间会非常短(

    编辑:

    注意:解析第一个请求仍然需要稍长的时间。

    【讨论】:

      猜你喜欢
      • 2020-08-04
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多