gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:28:08 25 4
gpt4 key购买 nike

我正在使用 v2 rev 421。
当我保存 protobuf-net 生成的流并将其放入字符串实用程序时,它发现了许多重复的字符串。我说的是应用程序生成的字符串,它可以被实习,但字符串实习似乎默认不启用。

我如何启用它?

谢谢。

最佳答案

这里有两种不同类型的实习;反序列化时有实习 - 这总是启用的,所以如果数据中有重复,你应该只看到一个 .NET string托管类中的实例,根据需要重复使用多次。

序列化时也有实习,以避免在序列化时将数据复制到流中。这是不是 默认情况下,原因很简单,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]; }
}

关于.net - 如何在 protobuf-net 中启用字符串实习?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6463460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com