1

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

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

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

4

2 回答 2

4

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

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

于 2015-06-16T01:41:04.037 回答
0

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

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

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

编辑:

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

于 2015-06-18T16:24:56.360 回答