company-desktop
|
9167303cce
|
docs: 增加管道截面恢复性能改造计划
背景:diagsession 实测显示,打开大图纸时"截面恢复"是仅次于 Parasolid 的第二大开销,
且每个实体都要落一次 SAT 临时文件(写盘 + acisIn + 删除),会被杀软逐个扫描。
实测依据(report.diagsession,CAD 2019 系 / R190 部署,Debug):
- AecDbEwPipeBase::RegionAcisInDwgInFields 栈内 7.30%
- CoreTools::StringToRegion 栈内 6.88%
- CoreTools::RegionToString(反向回写)3.07%
- 参照:base_ViewportDraw 74.28%,Parasolid ≈43%
说明:采样只统计在跑 CPU 的时间,临时文件 I/O 等待不进采样,实际墙钟占比高于上表。
计划分四段,每段可独立回退:
- Phase 0 先加计数器(Debug + 环境变量开关),拿到单次成本与文本 hash 唯一数,
用复用率决定后续是否值得投入。
- Phase 1 截面内容缓存:按 SAT 文本 hash 缓存 region 母体,命中返回 clone。
平台/版本无关,不动存盘格式;覆盖 AecDbEwPipeBase 全部子类 + StringToRegion 的调用方;
落盘次数从 O(实体数) 降到 O(唯一截面数)。
- Phase 2 临时目录治理:改用已有的 CoreTools::getTempFilePath 带父目录重载,
父目录从 INI 读,可加入杀软排除。
- Phase 3(R20+ 且非 ZRX)改用 dbacis.h 的 acdbModelerSave/RestoreEntityFromDwgFiler,
几何直接写进 DWG filer,不再产生 SAT 文本、不再落盘。
版本/平台分支:产品从 ARX R20 起支持,R190 与中望保留现有 SAT 分支。
按 AGENTS.md 红线,不在源码里比较 ARX 版本号(ZRX 的 CAD_SDK_VERSION 是年份 2023~2026,
与 ARX 19~26 数值重叠),改为在 cmakelists.txt 里算好能力宏 AEC_HAS_MODELER_FILER,
源码只用该宏切换。
已核实的 SDK 边界(文档内附版本矩阵):
- AcDbBody::acisIn 全版本只有文件名重载,没有 buffer 版;Arx 里也没有 api_restore_entity_list,
所以"完全不落盘"只能走 modeler filer 通道。
- acdbModeler*FromDwgFiler 从 R20.0 起才有,R19.0 没有。
- acdbModelerSaveEntityToDwgFiler 需要裸 ENTITY*,只能通过标了 INTERNAL USE ONLY 的
getLockedASMBody/setASMBody 取得,因此 Phase 3 必须先做 round-trip 最小验证。
文档同时记录了存盘兼容性决策(S1 配置切换 / S2 按版本自动 / S3 双写,推荐 S1 且默认仍写 SAT)、
风险与回滚、验证清单(R230/R190/ZRX 编译 + CAD 实测 + 复录 trace 对比)和 5 个未决问题。
验证:仅文档,未改代码,无编译与 CAD 实测。
|
2026-10-28 15:29:24 +08:00 |
|