【问题标题】:Does Protobuf-net tag numbers have performance implicationsProtobuf-net 标签号是否对性能有影响
【发布时间】:2014-04-13 18:41:01
【问题描述】:
我记得曾经读过用于 protobuf-net 的标签对性能有影响,但我似乎没有找到那个帖子......
例如,使用 ProtoInclude(1001, typeof(MyType)) 将不如 ProtoInclude(101, typeof(MyType)) 有效
会员等也是如此。
您能否对此有所了解并提供一些最佳实践?
谢谢,
【问题讨论】:
标签:
.net
serialization
protocol-buffers
protobuf-net
【解决方案1】:
协议缓冲区中的字段编号使用“varint”编码进行编码。在“varint”中,MSB 是一个连续位,因此每个字节只有 7 位用于数据。但是,前 3 位是为字段类型保留的;这意味着:
- 一个4位的字段号可以存储在一个字节中(包括字段类型)
- 一个 11 位的字段号可以存储在 2 个字节中
- 一个 18 位的字段编号可以存储在 3 个字节中
等等。
十进制101是一个7位数字;十进制 1001 是一个 10 位数字;所以每个字段都需要 2 个字节。这基本上就是开销在这里的工作方式。除此之外:没关系。