尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

CAPCOM开源REDox:高性能.NET结构化数据引擎解析,一个Token DOM统一JSON/CBOR/MessagePack等9种格式

CAPCOM开源REDox:高性能.NET结构化数据引擎解析,一个Token DOM统一JSON/CBOR/MessagePack等9种格式 CAPCOM开源REDox高性能.NET结构化数据引擎解析一个Token DOM统一JSON/CBOR/MessagePack等9种格式【免费下载链接】REDoxHigh-performance, token-based structured data engine for .NET. A core component of REX, the technology behind CAPCOMs next-generation game engine.项目地址: https://gitcode.com/gh_mirrors/redox/REDoxREDox是 CAPCOM 为其次世代游戏引擎 REX 技术打造的高性能 .NET 结构化数据引擎采用独特的Token DOM令牌 DOM设计用同一套紧凑的 64 位令牌结构统一处理JSON、JSON5、CBOR、MessagePack、TOML、XML、HTML、CSV、INI共 9 种格式。它同时做到解析速度媲美System.Text.Json的 tape DOM、可编辑能力达到JsonNode级别、灵活性比肩 Newtonsoft.Json——这正是官方基准测试中反序列化最高1.8 倍、自动并行反序列化最高2.8 倍于 System.Text.Json 的来源。一、REDox 是什么为什么值得关注REDox 不是又一个 JSON 序列化库。它把结构化数据解析为固定大小的令牌序列这个令牌序列既是文档模型也是所有格式共享的结构索引层JSON / JSON5 / CBOR / MessagePack / TOML / XML / HTML / CSV / INI / DOX ↓ 紧凑的 Token DOM / IR中间表示 ↓ Reader / Writer / Serializer / Deserializer ↓ .NET 对象、JSON、CBOR、MessagePack、TOML、XML、HTML、DOX……三个通常互相冲突的目标被它同时拿下⚡速度tape DOM 级别的解析性能✏️可编辑直接在文档上增删改无需构建重型对象树灵活位置无关的$type、$id/$ref、乱序构造函数绑定Newtonsoft.Json 的经典能力官方声明它是 REX 技术CAPCOM 次世代游戏引擎的核心的组成部分之一且以Apache-2.0协议开源要求.NET 10。二、核心架构一个 64 位令牌如何统管一切REDox 的心脏是位于 DToken.cs 的64 位双模式令牌。每个值都由一个固定大小的 64 位整数描述其中 1 个扩展位决定载荷的解释方式扩展位 0载荷交由文档/格式层解释——令牌是源数据视图字符串、数字可以直接复用原始缓冲区切片不急于物化扩展位 1载荷解释固定由 REDox 掌控配合控制令牌实现格式无关的编辑操作插入 / 删除 / 替换令牌能表示 null、布尔、整数、浮点、字符串、二进制、时间戳、大数、数组、对象、注释/空白trivia等类型枚举定义在 DTokenKind.cs。 通俗理解传统 Node DOM 每个节点都是堆上对象内存分散、GC 压力大REDox 把整个文档压成一条紧凑的磁带CPU 缓存友好这就是它分配更少的根本原因。可变的 Tape DOM编辑而不重建传统 tape DOM 是只读的结构靠扁平序列隐式表达。REDox 在容器视图DArray、DObject、DMap见 DArray.cs、DObject.cs、DMap.cs上增加了一层间接层值槽位可重新链接空闲列表复用空出的令牌槽位——插入、删除、替换都不需要重建整个文档却保留了顺序布局的缓存友好性。不对称读写设计读和写的需求完全不同REDox 为两个方向设计了不同路径方向策略为什么序列化通过DataWriter单趟直写输出缓冲值已知无需前瞻无需中间 DOM反序列化先构建 Token DOM再通过DataReader按令牌 id 随机访问结构未知需要前瞻、乱序绑定、上下文查询正因为反序列化时整个结构一次性可见REDox 才能做到数组/集合预分配正确大小$type出现在对象的任何位置都能被解析构造参数乱序收集、一次性绑定支持 record 与主构造函数用整篇文档上下文解析$id/$ref引用环自动选择顺序或并行反序列化字符串、数字按需解码不变的源切片直接复用相关抽象见 Serialization 目录DataReader/DataWriter/DataConverterT。三、性能表现基准测试数据一览官方基准BenchmarkDotNet.NET 10AMD Ryzen Threadripper PRO 5975WX显示相对 System.Text.Json数据集反序列化并行反序列化序列化canada.json数值密集约 2.2 MB1.68x2.84x1.06xcitm_catalog.json1.77x2.25x1.62xtwitter.json1.36x2.34x1.42x内存分配同样可观canada.json反序列化 REDox 约分配2.56 MB而 System.Text.Json 约8.53 MB约为 1/3。 注意这些比值仅针对基准数据集不是通用性能保证——官方也建议用自己的负载做基准测试。测试数据simdjson-data、JSONTestSuite等以子模块形式位于 external/ 目录。四、9 种格式统一接入跨格式转换一行搞定各格式以独立 NuGet 包提供包名CAPCOM.REDox.*前缀命名空间REDox.*包名状态说明CAPCOM.REDox公开核心 JSON JSON5 DOX 通用序列化基础设施CAPCOM.REDox.Cbor/.MessagePack/.Ini/.Dynamic公开CBOR、MessagePack、INI 集成 / dynamic 访问CAPCOM.REDox.Serialization.SystemTextJson/.NewtonsoftJson预览两大主流 JSON 库的兼容层CAPCOM.REDox.Serialization.DataContractJson公开DataContractJsonSerializer 兼容层CAPCOM.REDox.Toml/.Xml/.Html/.Csv预览TOML、XML、HTML、CSV 支持因为共享同一 Token IR跨格式转换变得极其简单——官方示例见 README.md 的Cross-format conversion一节JSON5 → Token IR → JSON JSON → Token IR → CBOR CBOR → Token IR → MessagePack TOML → Token IR → JSON解析入口如 JsonDocument.cs、CborDocument.cs、MessagePackDocument.cs 都提供Parse/Encode等成对 API解析成文档模型后即可用另一种格式重新编码。五、进阶特性速览1. 自动并行反序列化 反序列化器会检查每个数组的元素数与令牌范围足够大就并行太小就顺序执行避免调度开销。阈值可配置默认值见 ParallelDeserializeOptions.csvar settings new DoxSerializerSettings { ParallelOptions new ParallelDeserializeOptions { ParallelDeserializeEnabled true, MinimumNumberOfElements 1024, MinimumNumberOfTokens 4096 } }; var players JsonSerializer.DeserializePlayer[](json, settings);2. JSON5 注释与 Trivia 保留 ✏️解析 JSON5 时开启PreserveTrivia注释、空白等琐碎信息能在编辑文档后依然保留并重新编码——对配置文件的原地改写场景非常实用。入口见 Json5Document.cs。3. NDJSON / JSON 序列异步流式读取 JsonSequence可以异步流式读取 NDJSON 或超大顶层数组逐值产出、不全量加载内存适合日志、事件流场景见 JsonSequence.cs 与 JsonStreamTest.cs。4. dynamic 访问 REDox.Dynamic包提供DDynamic用 C# 的dynamic语法直接读写令牌 DOM如player.name还能动态构建对象再序列化见 DDynamic.cs。5. DOX 格式与深克隆 DOX 是镜像内存令牌布局的二进制格式从 DOX 重建文档几乎不需要结构重建因此天然适合做基于序列化的深克隆——得到的是独立可编辑副本而非共享只读视图见 DoxSerializer.cs。6. 三大主流序列化器兼容层 存量项目可以直接把现有的JsonSerializerOptions/JsonSerializerSettings/DataContractJsonSerializerSettings适配进 REDox兼容层分别位于 REDox.Serialization.SystemTextJson、REDox.Serialization.NewtonsoftJson、REDox.Serialization.DataContractJson迁移成本大幅降低。六、快速上手安装与 30 秒体验dotnet add package CAPCOM.REDox dotnet add package CAPCOM.REDox.Cbor dotnet add package CAPCOM.REDox.MessagePack预览包需加--prerelease如dotnet add package CAPCOM.REDox.Toml --prerelease。核心用法一以贯之——同一个 API 表面完成序列化、反序列化、解析、编辑using REDox.Json; var json JsonSerializer.Serialize(player); // 序列化 var restored JsonSerializer.DeserializePlayer(json); // 反序列化 using var doc JsonDocument.Parse(json); // 解析为 Token DOM var root doc.RootElement.AsObject(); root[Name] Claire; // 替换 root.Add(Hp, 100); // 新增 root.Remove(Level); // 删除 var edited doc.RootElement.ToJsonString(); // 重新编码想从源码构建与跑测试git clone --recurse-submodules https://gitcode.com/gh_mirrors/redox/REDox cd REDox dotnet build REDox.slnx -c Release dotnet test REDox.slnx -c Release dotnet run -c Release --project benchmarks/REDox.Json.Benchmarks七、仓库结构导览 ️路径内容src/REDox/核心引擎令牌DToken.cs、文档Document.cs、容器视图、Serialization转换器、元数据属性src/REDox/Json/JSON / JSON5 解析、写入、序列器src/REDox.Cbor/、src/REDox.MessagePack/CBOR、MessagePack 集成src/REDox.Toml/、src/REDox.Xml/、src/REDox.Html/、src/REDox.Ini/、src/REDox.Csv/各预览/公开格式组件tests/全量测试含各格式兼容性测试benchmarks/BenchmarkDotNet 基准JSON、CBOR、MessagePack、Dynamicexternal/第三方测试数据JSONTestSuite、toml-test 等git 子模块八、总结谁应该关注 REDox✅该用它的场景追求极致性能与低 GC 压力的 .NET 数据管道游戏、服务端高频 IO需要跨格式互转如 CBOR ⇄ JSON ⇄ MessagePack的系统想原地编辑 JSON/JSON5 并保留注释的配置工具存量 Newtonsoft.Json / System.Text.Json 项目想平滑提速⚠️需要权衡的项目处于活跃开发期预览组件 API 可能变化要求 .NET 10。REDox 用一个 64 位令牌把解析、编辑、格式互转、并行反序列化统一到同一数据模型上是 .NET 生态中目前少有的格式无关结构化数据引擎。对数据格式打交道多的开发者值得把它加进技术雷达 。【免费下载链接】REDoxHigh-performance, token-based structured data engine for .NET. A core component of REX, the technology behind CAPCOMs next-generation game engine.项目地址: https://gitcode.com/gh_mirrors/redox/REDox创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表