ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

JSON反序列化能快多少?REDox vs System.Text.Json/Utf8Json 基准测试全解读

JSON反序列化能快多少?REDox vs System.Text.Json/Utf8Json 基准测试全解读 JSON反序列化能快多少REDox vs System.Text.Json/Utf8Json 基准测试全解读【免费下载链接】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是 .NET 平台的一款高性能 Token 化结构化数据引擎也是 CAPCOM 下一代游戏引擎 REX 技术的核心组件。在这篇文章中我们将用 BenchmarkDotNet 实测数据完整解读REDox JSON 反序列化对比System.Text.Json和Utf8Json的性能表现反序列化最高快1.8 倍自动并行反序列化最高快2.8 倍序列化最高快1.6 倍内存分配最多降低约 70%。 测试环境与方法说明在看数字之前先明确测试条件避免跑分党式误读项目配置基准框架BenchmarkDotNetRelease 配置运行时.NET 10X64 RyuJITCPUAMD Ryzen Threadripper PRO 5975WX操作系统Windows 11对比对象REDox、REDox并行、System.Text.Json、STJ源生成 JsonTypeInfo、Utf8Json对比方法源码在 JsonDeserialize.cs可以看到每家库都走的是从 UTF-8 字节数组直接反序列化为强类型对象这条最常见路径并且启用了[MemoryDiagnoser]同时统计耗时Mean和内存分配Allocated——后者对高吞吐服务端往往是更敏感的指标。测试数据来自 simdjson 社区公认的基准数据集通过 Canada.cs、CitmCatalog.cs、Twitter.cs 加载canada.json约 2.2 MB地理边界数据数值密集、嵌套深citm_catalog.json商品目录对象结构规整、字段重复twitter.json社交事件流字符串比例高、结构复杂。覆盖三种典型数据形态结论才有参考价值。 先看结论REDox 反序列化能快多少数据集反序列化反序列化自动并行序列化canada.json1.68x2.84x1.06xcitm_catalog.json1.77x2.25x1.62xtwitter.json1.36x2.34x1.42x倍数为相对 System.Text.JsonJsonSerializer的加速比基于上表所列基准数据集并非通用性能保证。核心看点顺序反序列化稳定领先 1.4~1.8 倍数据形态越数值密集canada优势越大自动并行反序列化最高 2.84 倍——注意是自动开启一个开关引擎会按数组规模自行决定哪些元素并行、哪些保持顺序小数据不会因并行调度反而变慢序列化同样小幅领先citm_catalog 场景达到1.62 倍。 详细数据耗时与内存分配Mean / Allocated反序列化为什么内存分配差异更扎眼数据集REDoxREDox并行System.Text.JsonSTJ (JsonTypeInfo)Utf8Jsoncanada.json9,113 us / 2.62 MB5,385 us / 2.69 MB15,303 us / 8.73 MB15,006 us / 8.73 MB15,864 us / 6.66 MBcitm_catalog.json2,281 us / 554 KB1,796 us / 632 KB4,041 us / 1.18 MB3,941 us / 1.18 MB2,606 us / 1.12 MBtwitter.json1,009 us / 505 KB587 us / 556 KB1,372 us / 557 KB1,402 us / 557 KB1,371 us / 530 KB拿 canada.json 说REDox 反序列化只分配约 2.56 MB而 System.Text.Json 分配约 8.53 MB分配量直接砍掉约 70%。这意味着什么GC 压力更小高 QPS 接口每秒处理几万个 canada 级对象时STJ 每秒会多出数十上百 MB 的瞬时垃圾容易触发 GC 停顿缓存局部性更好REDox 把所有值压进定长 64-bit Token 的紧凑结构CPU 缓存命中率更高这不只是理论——twitter 这种小对象密集数据上REDox 分配量甚至低于 STJ并行模式只多花约 65 KB并行路径的额外代价收集 Token ID、任务调度对总分配几乎无感。序列化REDox 直写输出缓冲无中间 DOM数据集REDoxSystem.Text.JsonSTJ (JsonTypeInfo)Utf8Jsoncanada.json13,616 us / 2.04 MB14,388 us / 2.04 MB14,433 us / 2.04 MB11,714 us / 6.04 MBcitm_catalog.json669 us / 494 KB1,085 us / 495 KB1,074 us / 495 KB707 us / 1.39 MBtwitter.json557 us / 465 KB789 us / 468 KB800 us / 468 KB709 us / 1.36 MB序列化场景中 REDox 在分配量上与 STJ 持平都约 494/465 KB但耗时快1.42~1.62 倍。注意 citm_catalog 和 twitter 上 Utf8Json 耗时不慢但分配量是 REDox/STJ 的 2.8 倍——这再次说明只看均值会漏掉一半信息。 小提醒canada.json 序列化中 Utf8Json 反而最快11.7 ms但代价是 3 倍以上的分配。基准结果依赖数据形态、目标类型、运行时和 CPU务必用自己的负载复测。⚙️ 快在哪里REDox 的 Token DOM 架构非术语版REDox 之所以快核心是把解析和反序列化拆成了两个阶段先把 JSON 解析成紧凑的 Token DOM每个值用固定 64-bit Token 描述见 DToken.cs、DTokenKind.cs整个文档就是一个连续的 Token 数组CPU 顺序扫描极其友好再基于结构索引做反序列化因为结构已知引擎可以——数组预先分配精确大小避免扩容拷贝$type任意位置出现都能解析不依赖第一个字段构造器参数乱序收集一次绑定record、主构造器友好字符串/数字懒解码不请求就不解码大数组自动切分并行反序列化见 ParallelDeserializeOptions.cs。写入方向则是完全相反的路径值已知 → 单遍直写输出缓冲不建任何中间对象树。这套读多结构索引、写无中间态的不对称设计是它同时快于 STJ 和 Utf8Json 的关键。想深入原理可阅读 DToken.cs、DValue.cs、Serializer.cs 三个核心文件以及 JsonDocument.cs。 如何自己复现这套基准测试仓库自带完整基准工程两步跑起来git clone --recurse-submodules https://gitcode.com/gh_mirrors/redox/REDox cd REDox dotnet run -c Release --project benchmarks/REDox.Json.Benchmarks注意--recurse-submodules不能省——canada.json 等测试数据在external/simdjson-data子模块里。基准必须在 Release 下运行且结果与你的 CPU/运行时强相关建议对比自己业务的真实 JSON 和目标类型。基准代码入口在 Main.cs数据源定义在 benchmarks/REDox.Benchmarks/Data/ 目录下按数据集一文件一个类非常易读。 什么时候值得换 REDox✅适合的场景高吞吐 API/网关JSON 反序列化是热点路径大数组负载玩家列表、事件流、日志批处理——自动并行反序列化收益可达 2 倍以上对 GC 停顿敏感的实时服务游戏服务器、金融撮合需要 JSON ↔ CBOR ↔ MessagePack ↔ TOML 跨格式转换——同一 Token IR 一套转换器通吃DoxSerializer.cs想兼容现有 System.Text.Json / Newtonsoft.Json 设置——有现成的适配层SystemTextJson、NewtonsoftJson。⚠️需要权衡的场景项目已深度绑定 STJ 的 AOT/源生成生态迁移成本 收益JSON 负载很小且 QPS 不高——绝对差异可能只有毫秒级要求 .NET 10REDox 的最低运行要求。 延伸阅读基准数据与图表benchmarks/REDox.Json.Benchmarks/核心 JSON 实现src/REDox/Json/序列化抽象格式无关的 DataReader/DataWritersrc/REDox/Serialization/并行反序列化配置ParallelDeserializeOptions.cs项目许可Apache-2.0LICENSE总结维度一句话结论反序列化速度比 STJ 快1.36~1.77 倍稳定领先 Utf8Json并行反序列化自动并行最高2.84 倍开关一个布尔值内存分配canada 场景比 STJ 少约70%序列化快1.06~1.62 倍分配量与 STJ 持平REDox 用紧凑 Token DOM 懒解码 自动并行三板斧把 JSON 反序列化从解析即分配变成了先索引后按需。如果你的 .NET 应用被 JSON 处理拖慢了响应值得一试——毕竟复现整套基准只需要两条命令。【免费下载链接】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),仅供参考
返回列表