Wire protocol buffers 与 Cap'n proto - 哪个更好?
Wire protocol buffers vs Cap'n proto - which one is better?
我目前在我的一个 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来解析少量数据,那很可能是其他地方出了问题。通常它应该能够在那个时候解析大约 1 兆字节或更多。
对我来说,问题是每次解析消息时都会创建 Wire 实例。
// Sample code
Wire wireObj = new Wire(<extension>);
output = wireObj.parseFrom(<buffer>, <extension>);
事实证明,如果每次需要解析消息时都创建一个Wire实例,那么很耗时。但是,如果您只创建它一次并将其重复用于所有其他解析请求,则花费的时间会非常少 (< 1ms)。
编辑:
注意:虽然解析第一个请求仍然需要稍长的时间。
我目前在我的一个 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来解析少量数据,那很可能是其他地方出了问题。通常它应该能够在那个时候解析大约 1 兆字节或更多。
对我来说,问题是每次解析消息时都会创建 Wire 实例。
// Sample code
Wire wireObj = new Wire(<extension>);
output = wireObj.parseFrom(<buffer>, <extension>);
事实证明,如果每次需要解析消息时都创建一个Wire实例,那么很耗时。但是,如果您只创建它一次并将其重复用于所有其他解析请求,则花费的时间会非常少 (< 1ms)。
编辑:
注意:虽然解析第一个请求仍然需要稍长的时间。