我目前在我的一个 android 应用程序中使用有线协议缓冲区,看起来它的 parseFrom() 方法效率不高,因为即使解析非常少量的数据也需要大约 10 毫秒。
所以我遇到了这个:https ://capnproto.org/index.html
有谁知道这两个协议缓冲区之间的主要区别是什么,主要是在性能和功能方面?
我目前在我的一个 android 应用程序中使用有线协议缓冲区,看起来它的 parseFrom() 方法效率不高,因为即使解析非常少量的数据也需要大约 10 毫秒。
所以我遇到了这个:https ://capnproto.org/index.html
有谁知道这两个协议缓冲区之间的主要区别是什么,主要是在性能和功能方面?
“Wire Protocol Buffers”只是 Protocol Buffers 的另一种实现。Cap'n Proto 是一种完全不同的、不兼容的格式。Cap'n Proto 网站有很多文字说明它与 Protocol Buffers 的不同之处。Cap'n Proto 的主要问题是它不够成熟或没有被广泛使用。
如果你发现一个 protobuf 解析器需要 10ms 来解析少量的数据,那很可能还有其他问题。通常,它应该能够在那段时间内解析大约一兆字节或更多。
对我来说,问题是每次解析消息时都会创建 Wire 实例。
// Sample code
Wire wireObj = new Wire(<extension>);
output = wireObj.parseFrom(<buffer>, <extension>);
事实证明,如果每次需要解析消息时都创建一个 Wire 实例,那么它是非常耗时的。但是,如果您只创建一次并将其重用于所有其他解析请求,则花费的时间会非常少(< 1ms)。
编辑:
注意:虽然解析第一个请求仍然需要稍长的时间。