在消息中包装数据的开销

时间:2017-12-01 06:00:13

标签: c++ protocol-buffers

将protobuf参数包装在单独的消息中是否会产生额外的运行时开销?

此:

var string1 = "orders"
var string2 = "orders/pack"
var string3 = "orders/123"
var str = "order"
console.log(string1.includes(str)); //false 
console.log(string2.includes(str)); //true
console.log(string3.includes(str)); //true

VS

message MyData {
  optional uint32 data = 1;
}

message Container {
  optional MyData data = 1;
}

如果重要的话,我只使用C ++实现。

额外的电线开销?序列化开销?访问开销?

1 个答案:

答案 0 :(得分:1)

根据encoding explanation of protobufs

,每个嵌入消息都有开销

下面带有一个int值的简单消息将被编码为08 96 01

message Test1 {
  required int32 a = 1;
}

同时,带有嵌入消息的消息定义编码看起来像1a 03 08 96 01

Test1:  
message Test3 {  
  required Test1 c = 3;  
}

文档解释说

  

最后三个字节与我们的第一个示例(08 96 01)完全相同,并且它们之前是数字3 - 嵌入式消息的处理方式与字符串完全相同(线型= 2)

因此,简而言之1a 03作为开销添加到Test3,因为Test1是另一种消息类型