跳至内容
Rion — 从 RST 解析工具到高性能 .NET 9.0 库的演进

Rion — 从 RST 解析工具到高性能 .NET 9.0 库的演进

两代 Rion

GitHub 上有过两个 Rion 仓库:

Rion(旧) Rion(新)
账号 Wenveo Roshaless
状态 WIP 存档 活跃开发
定位 RST ↔ JSON 简单转换 高性能库 + CLI + GUI
运行时 早期 .NET .NET 9.0
AOT ✅ Native AOT
3 3

GitHub: Roshaless/Rion | MIT 协议

架构设计

新版 Rion 采用清晰的三层架构:

Rion/
├── src/
│   ├── Rion.Core/          # 核心库 — 读写/转换 .stringtable
│   │   ├── Buffers/        #   内存缓冲区、文件 IO 抽象
│   │   ├── Hashing/        #   RST 哈希算法(XxHash3、XxHash64)
│   │   ├── Metadata/       #   字符串表元数据与版本兼容
│   │   └── Serialization/  #   JSON ↔ 二进制序列化
│   ├── Rion.Cli/           # CLI 工具
│   │   └── Commands/       #   子命令实现
│   └── Rion.App/           # 桌面 GUI(Avalonia)— 开发中

核心特性

极致性能

操作 吞吐量
读取 .stringtable(100K 条目) ~22 ms
写入 .stringtable(100K 条目) ~27 ms

关键优化:

  • 零拷贝 — 全链路 Span<byte> / ReadOnlySpan<byte>
  • unsafe 指针算术 — 哈希表遍历
  • NativeMemory.Alloc — 直接内存管理
  • StringRefManager — 弱引用字符串驻留
  • AOT 兼容 — 无反射代码路径

多种哈希算法

支持 XxHash3 和 XxHash64,兼容所有已知 RST 版本(v2–v5):

版本标识 算法 Bit Mask
v2 XxHash64 legacy
v3 XxHash64 legacy
v4 XxHash64 legacy
v5 / v5-legacy XxHash3 38-bit
v5-1415 XxHash3 38-bit
v5-1502 / latest XxHash3 38-bit

双向转换

# 自动检测格式并转换
rion data.stringtable              # → data.json
rion data.json                     # → data.stringtable

# 批量转换
rion *.stringtable -d ./output

# 显式指定目标格式
rion data.bin -t json
rion data.json -t rst

逆哈希查找

# 预加载已知字符串→哈希映射
rion data.stringtable --hashes-dir ./hashes

# 按哈希值搜索
rion lookup data.stringtable --hash 0x155C62DCFD

# 按字符串值搜索
rion lookup data.stringtable --value "champion" -n 20

哈希计算

# 默认最新算法
rion hash "hello"

# 指定游戏版本
rion hash "hello" -v v5-1502

# 基准测试
rion hash "test" -v latest -n 1000000

# 列出所有支持的版本标识
rion hash --list-versions

API 速览

using Rion.Core;
using Rion.Core.Metadata;

// 读取
var table = StringTable.Read("data.stringtable");

// 创建并写入
var newTable = StringTable.Create(StringTableMetadata.Latest);
newTable["champion_name"] = "Ashe";
StringTable.Write("output.stringtable", newTable);

// JSON 互转
var record = StringTable.ReadAsRecord("data.stringtable");
StringTableSerializer.SerializeToJsonFile("data.json", record);

从依赖到独立

回顾整个技术线:

GZSkinsX(WinUI 3 模组工具)
    ↓ 依赖
Noisrev.League.IO.RST(.NET Standard 2.0 NuGet 库)
    ↓ 演进
Rion — Wenveo(WIP 简单转换工具)
    ↓ 重写
Rion — Roshaless(.NET 9.0 高性能库 + CLI + Avalonia GUI)

每一步都建立在对 RST 格式理解的深入之上。


Rion 需要 .NET 9.0 SDK,支持 Windows、Linux 和 macOS。