当前位置 : 主页 > 大数据 > 区块链 >

.net – 如何在protobuf-net中启用字符串实习?

来源:互联网 收集:自由互联 发布时间:2021-06-22
我正在使用v2 rev 421. 当我保存protobuf-net生成的流并通过字符串实用程序时,它发现了许多重复的字符串.我说的是应用程序生成的字符串,可以实现,但字符串实习似乎默认情况下不启用. 我
我正在使用v2 rev 421.
当我保存protobuf-net生成的流并通过字符串实用程序时,它发现了许多重复的字符串.我说的是应用程序生成的字符串,可以实现,但字符串实习似乎默认情况下不启用.

我该如何启用它?

谢谢.

这里有两种不同类型的实习;在反序列化时有实习 – 这始终是启用的,因此如果数据中有重复项,您应该只在托管类中看到一个.NET字符串实例,并根据需要重复使用多次.

序列化时也有实习,以避免在序列化时将数据复制到流中.默认情况下不启用,原因很简单,因为protobuf规范中没有定义这样的行为; protobuf-net默认尝试保留在规范内,仅在选择加入的基础上使用扩展.

如果要为protobuf-net = to = protobuf-net使用启用此功能,请为任何给定字符串启用AsReference选项:

[ProtoMember(13, AsReference = true)]
public string Foo { get; set; }

这使用了protobuf-net特定于实现的表示.但是,它不会很好地用于互操作目的.如果您需要以可互操作的方式使用它,唯一要做的就是单独存储列表(可能在List< string>某处),并使用数据列表中的位置,即

// this is .... uglier, but probably easier if you need cross-platform
public int FooOffset {
    get { return Foos.IndexOf(Foo); }
    set { Foo = Foos[value]; }
}
网友评论