Protobuf 标识符性能

Protobuff identifiers performance

在 protobuf-net 文档中,它指出属性上的标识符:

lower numbers take less space - don't start at 100,000,000

为什么会这样,使用更大的数字是否存在任何其他性能问题?

字段 headers 被编码为 varint;这方面是因为 "varint encoding" 的工作方式。有点类似于 UTF-8,我们预计 "abc"(3 个字符)占用 3 个字节,但 "Åℬℂ"(也是 3 个字符)占用 9 个字节。

本质上,“varint”是一个7位编码,其中第8位表示连续; 100,000,000 是(二进制)101111101011110000100000000 - 27 位;请注意,“wire type”在此之上也是 3 位,因此我们总共查看 30 位,这意味着使用 7-bit-plus-continuation 编码将占用 5 个字节(4×7= 28太小了;5×7=35).

至于其他问题:还有一个保留范围 protobuf-net 不强制执行 ,但应避免:19000 到 19999

与字段编号没有直接关系,但一般 protobuf 指导:避免使用负 varint 数值,除非您使用“zig-zag”编码(DataFormat.Signed 在 protobuf-net 术语中)。