正如here所解释的那样,在集合中使用"group“模式可以加快序列化速度,我想知道是否也可以将其用于打包为原语类型的列表/数组数据,如下面的示例类中所示。
[ProtoContract]
public class Foo
{
[ProtoMember(1, IsPacked = true, DataFormat = DataFormat.Group)]
public float[] Numbers { get; set; }
}我正在使用protobuf-net2.4.0。
发布于 2022-10-14 11:08:54
组编码在这里根本不适用。组编码专门用于子对象--简单地说,它类似于使用{和}哨兵来启动/结束JSON子对象,而不是说“接下来的542字节是子对象”--使用哨兵只需要添加已知值,而不必首先计算尚未序列化的对象需要542字节。
在float的情况下,它们总是被编码为一个固定的大小(在本例中是32位)值。此处打包和未打包的区别最好通过编写5个值来显示;如果不进行打包,它会说:“下一个值是字段1,固定-32(后面是4个字节)”,5次(总共25个字节);其中--与打包编码一样,它会说“下一个值是字段1,长度为20 (后面是20个字节)”(只需执行5个条目x4字节),总共为22个字节。这种差异对于大型集合来说更加重要,尽管不必解析多个字段头等也有一些处理好处。在许多情况下,“打包”比您想象的要自动化一些,因此您可能会发现它已经使用了打包(只要您不指定Packed=false)。
https://stackoverflow.com/questions/74067874
复制相似问题