company-desktop
764e544db4
perf: 增加属性 key 命中率统计(Phase 0 补充)
意图:内容 hash 只看到 54% 命中率,但业务上"同数据的管子/管件截面必然相同",
所以要用实体属性做 key 再量一次,决定 Phase 1 到底用哪种缓存键。
新增 SectionPerf::AttrKey(RAII):
- 构造时按类名(isA()->name())初始化 hash 与统计桶,析构时记一次
- Add() 增量喂字节,调用方决定哪些字段参与 key
- 统计按实体类分开(total / unique / hits / hit_rate)
接入 AecDbEwPipeBase::RegionAcisInDwgInFields:key = 类名 + 全部 spec XData,
但排除编号("No.",每根管子唯一)并跳过 Id / 点 / 向量 / 矩阵 / 二进制类型
(与截面无关或随实体变化)。只在 AEC_PERF_COUNTER=1 时构建,Release 无开销。
实测(big1.dwg,AutoCAD 2020 / R230 Debug,113 s 开图):
属性 key 合计 3082 次 / 2672 命中 = 86.7%
AecDbEwPipe 1088 次 173 唯一 84.1%
AecDbEwPipeBase 1172 次 3 唯一 99.7%
(其余类 43%~99%)
内容 hash 54.0%
结论:属性 key 显著优于内容 hash,但只覆盖 3082/5641 次恢复
(另 2559 次走 CoreTools::StringToRegion,拿不到 spec 数据,只能用内容 hash)。
混合策略预计省 14.9 s / 22.6 s 恢复开销,约占 113 s 开图的 13%。
数据已写入 pipe-section-region-performance-plan.md,并标注一个未验证点:
属性 key 命中时两份 SAT 文本是否真的相同(决定 Phase 1 是否需要 textHash 兜底校验)。
验证:R230 Debug 编译通过并部署,用 tools/run_acad_perf.ps1 自动跑图取数。
2026-10-28 20:06:06 +08:00
..
2026-10-28 20:06:06 +08:00
2026-09-28 15:38:57 +08:00
2026-09-28 15:38:57 +08:00