跳到主要内容
版本:dev

配置

本页介绍 Apache Fory™ C# 的 ForyBuilder 选项和默认配置值。Config 是由 ForyBuilder 创建的不可变配置快照。

构建 Fory 实例

using Apache.Fory;

Fory fory = Fory.Builder().Build();
ThreadSafeFory threadSafe = Fory.Builder().BuildThreadSafe();

默认配置

Fory.Builder().Build() 使用以下配置:

选项默认值说明
TrackReffalse禁用引用跟踪
Compatibletrue启用兼容的 Schema 演进元数据
CheckStructVersionfalse禁用结构体 Schema 哈希检查
MaxDepth20最大动态嵌套深度
MaxGraphMemoryBytes134217728每次根值读取的近似对象图内存限制
MaxUnbackedContainerItems8192每次根值读取允许的无输入支撑 collection/map 工作量
MaxTypeFields512单个已接收结构体元数据主体的最大字段数
MaxTypeMetaBytes4096单个已接收元数据主体的最大编码字节数
MaxSchemaVersionsPerType10单个逻辑类型的最大远程元数据版本数
MaxAverageSchemaVersionsPerType3所有类型的平均远程元数据版本数

构建器选项

C# 始终使用兼容 xlang 的帧格式,因此 ForyBuilder 不提供模式切换选项。

TrackRef(bool enabled = false)

为共享引用和循环对象图启用引用跟踪。

Fory fory = Fory.Builder()
.TrackRef(true)
.Build();

Compatible(bool enabled = false)

启用 Schema 演进模式。C# 仅使用 xlang 编码格式,因此对于独立部署的通信方,默认启用兼容模式。要使用默认兼容模式,请直接调用 .Build(),不要调用此方法。传入 false,或不带参数调用 Compatible(),会改用相同 Schema 载荷。仅当每个读取端和写入端始终使用相同 Schema,并且希望获得更快序列化和更小体积时,才这样设置。对于跨语言载荷,只有确认每个通信方使用相同 Schema,或原生类型由 Fory Schema IDL 生成时,才调用 Compatible(false)

Fory fory = Fory.Builder()
.Compatible(false)
.Build();

CheckStructVersion(bool enabled = false)

有意使用相同 Schema 载荷时,检查 Schema 哈希。

Fory fory = Fory.Builder()
.Compatible(false)
.CheckStructVersion(true)
.Build();

MaxDepth(int value)

设置动态对象图的最大嵌套深度。

Fory fory = Fory.Builder()
.MaxDepth(32)
.Build();

value 必须大于 0

MaxGraphMemoryBytes(long value)

设置单次根值反序列化的近似对象图内存限制。该估算主要覆盖物化的 collection、map、array、struct 和 object。它会跳过 string、binary data、primitive scalar 和 dense primitive array 等叶子值,因此实际进程内存可能高于此值。

Fory fory = Fory.Builder()
.MaxGraphMemoryBytes(64L * 1024 * 1024)
.Build();

所有根输入形式的默认限制固定为 128 MiB。正值会覆盖默认值。创建运行时时会拒绝显式的非正值。被排除在对象图内存估算之外的叶子值仍受剩余输入字节限制:如果未读输入不包含足够字节,Fory 不会读取或创建该叶子值。

MaxUnbackedContainerItems(long value)

限制一次根值反序列化中,重复读取主体不按比例消费输入的 collection 元素和 map 条目。默认值为 8192;零表示严格限制。

Fory fory = Fory.Builder()
.MaxUnbackedContainerItems(8192)
.Build();

MaxTypeFields(int value)

设置单个已接收远程结构体元数据主体允许的最大字段数。

Fory fory = Fory.Builder()
.MaxTypeFields(512)
.Build();

MaxTypeMetaBytes(int value)

设置单个已接收 TypeMeta 主体允许的最大编码主体字节数,不包括 8 字节头部和任何扩展大小 varint。

Fory fory = Fory.Builder()
.MaxTypeMetaBytes(4096)
.Build();

MaxSchemaVersionsPerType(int value)

设置单个逻辑类型允许的最大远程元数据版本数。

Fory fory = Fory.Builder()
.MaxSchemaVersionsPerType(10)
.Build();

MaxAverageSchemaVersionsPerType(int value)

设置所有已接受远程类型允许的平均远程元数据版本数。有效的全局下限为 8192 个 Schema。

Fory fory = Fory.Builder()
.MaxAverageSchemaVersionsPerType(3)
.Build();

常用配置

兼容模式服务

Fory fory = Fory.Builder()
.TrackRef(true)
.Build();

相同 Schema 优化

仅当每个读取端和写入端始终使用相同 Schema 时才使用此配置。

Fory fory = Fory.Builder()
.Compatible(false)
.Build();

线程安全服务实例

ThreadSafeFory fory = Fory.Builder()
.TrackRef(true)
.BuildThreadSafe();

安全

有关信任边界、安全的读取端配置和验证方法,请参阅 C# 安全

相关主题