缓存治理与敏感字段的性能记录
2026-10-15,Windows 10.0.19045、.NET 10.0.13、6 个逻辑处理器,Release 单线程。以下测量针对当前组件增量,生产实现对应提交 953596e;没有把 Redis、数据库或日志输出 I/O 混入数值。原始汇总见 JSON,复现入口见 基准程序。
缓存封装与监测
| 场景 | 中位数 ns/次 | 分配 B/次 | 采样 P95 ns |
|---|---|---|---|
| 原生命中 | 99.1 | 0 | 200 |
| 治理命中,预建键 | 112.2 | 0 | 300 |
| 原生未命中,含 Remove | 698.3 | 464 | 2,000 |
| 治理未命中,含 Remove | 836.3 | 488 | 2,900 |
| 治理绕过 | 17.0 | 0 | 100 |
| 新建类型/Scope 隔离键 | 774.0 | 600 | 1,400 |
| 治理命中,有 MeterListener | 105.8 | 0 | 未采样 |
预建键命中增加约 13.1ns(13.2%),没有额外分配。未命中增加约 138ns 和 24B,包含治理层源加载状态、预算与采集,以及删除操作;它不是纯源读取成本。每次重建键有独立的摘要与分配成本,不能把“预建键命中 0B”扩展为所有调用 0B。
启用空监听回调的结果略低于无监听结果,说明这一级别存在 JIT/测量顺序和环境波动,不能据此宣称监听会加速。它只验证监听情况下的开销量级与零额外分配,不包含真实收集器聚合、导出序列化和网络。实际 OpenTelemetry 订阅/导出链路由独立集成验证确认可用。
这里使用不可变字符串,未测大 DTO、原生序列化克隆成本、真实 Redis 延迟/吞吐或高并发失效。回源预算及并发合并有功能验证,但本轮不以微基准声明生产容量。
敏感字段
| 场景 | 中位数 ns/次 | 分配 B/次 | 采样 P95 ns |
|---|---|---|---|
| 手机号掩码 | 22.8 | 48 | 100 |
| 邮箱掩码 | 75.9 | 80 | 500 |
| 手写受保护字段投影 | 206.7 | 480 | 1,200 |
| 属性驱动受保护投影 | 219.6 | 480 | 1,600 |
| 预处理 DTO 的普通 JSON | 301.2 | 176 | 1,000 |
| 原 DTO 的标记驱动 JSON | 414.5 | 304 | 1,200 |
| 普通日志,关闭级别 | 34.9 | 32 | 100 |
| 受保护日志,关闭级别 | 3.4 | 0 | 100 |
| 受保护日志,启用级别 | 274.2 | 624 | 900 |
属性驱动投影相对手写同样掩码、同样字段的字典增加约 12.9ns,分配相同。JSON 对照输出字节相同,自动保护增加约 113.3ns(37.6%)和 128B;增量来自输出时计算掩码及 getter 适配,不能用较少输出字段掩盖它。
普通日志关闭级别的对照仍构造日志参数数组;受保护入口先检查级别,所以没有 DTO 读取和分配。启用日志只测试创建与提交安全状态,没有 formatter、NLog/Serilog sink 或文件/网络 I/O。这些结果不能说明生产日志写入速度。
首次调用 Project 约 19.8ms,包含 JIT、字段计划和运行时访问器编译;热路径数值不包括这项成本,也不能假定所有类型首次耗时一致。对首请求敏感的宿主应在启动阶段准备要用的 DTO/序列化元数据,并单独验证启动时间。反射投影与 JSON 分类适配尚未通过 AOT/裁剪发布验收。
审计采集增量
| 三个变化字段 | 采集中位数 | 分配 |
|---|---|---|
| 普通字段 | 59.7µs | 9,384B |
| Phone/Email/Secret 分类 | 58.4µs | 9,712B |
测量在 EF SavingChanges 回调入口取样,然后抛出受控异常阻止 SQL,采集器照常恢复状态并移除暂存明细。模型和原值来自真实关系上下文;每次仅一个实体、三个字段变化。这里只隔离采集与差异生成,不统计异常处理或事务提交。
受保护路径增加 328B,耗时差异在此次样本与预热顺序下不能归因为性能收益。不能宣称字段保护使审计更快。它也没有解决前一轮 PostgreSQL 同事务审计性能未达标 的提交瓶颈;该验收结论仍然有效。
证据范围
批次中位数来自 7 轮、每轮 100,000 次;采样 P95 每 128 次记录一次,包含时间戳开销,尤其不适合给几十纳秒操作作严格尾延迟承诺。分配取当前线程差值,后台工作和完整请求的分配不在这个口径内。审计另测 2,000 次取中位数。
组件/集成验证覆盖空值命中、类型和 Scope 隔离、同键合并、预算释放、共享后端契约、实时撤权、原值不变、JSON/日志/CSV 保护、同掩码真实变化及敏感主键拒绝。共享后端契约使用测试实现,不能算 Redis 故障或容量验证。
RBAC 按宿主选择每次实时查库,撤权一致性因此不依赖缓存;授权查库带来的端到端成本仍需在实际数据库与业务负载中评估。组件热路径、外部依赖性能和业务一致性是不同验收维度。