首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原始类型的列表/数组数据的Protobuf-net IsPacked=true和DataFormat = DataFormat.Group

原始类型的列表/数组数据的Protobuf-net IsPacked=true和DataFormat = DataFormat.Group
EN

Stack Overflow用户
提问于 2022-10-14 10:26:45
回答 1查看 52关注 0票数 2

正如here所解释的那样,在集合中使用"group“模式可以加快序列化速度,我想知道是否也可以将其用于打包为原语类型的列表/数组数据,如下面的示例类中所示。

代码语言:javascript
复制
[ProtoContract]
public class Foo
{
    [ProtoMember(1, IsPacked = true, DataFormat = DataFormat.Group)]
    public float[] Numbers { get; set; }
}

我正在使用protobuf-net2.4.0。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74067874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档