0cb05b769f2bb1562ceffe3cb6c7e60fb20a402d
AecDbEwPipe / AecDbEwFitting 的 dwgInFields 会给缺失的样式键回填 颜色/线型/线宽/图层(PR #87 引入),走 CoreTools 的 4 个 getter; 每个 getter 都新建 CUIISQLiteServer 开一次 Plumbing.db,内部又调 getCurrentPipeSysTblName 再开一次。单实体最多 16 次 sqlite3_open, 几百个实体的图纸即几千次串行开库;绘制路径(setInfo2Ent / setInfo2Dc)同样走这 4 个 getter。 改为:一条 SQL 取全 COLOR/LINETYPE/LINEWIDTH/LAYNAME,结果按 「表名 + 系统名 + 中心线/外边线」做进程级缓存;表名本身按 getCurrentTrade() 缓存。首次 2 次开库,之后全部内存命中。 - 只改 CoreCommand/CoreTools.cpp,对外签名不变,192 处调用点全覆盖 (CoreLibrary / PipelineCmd / PipelineSpecCmd / HvacCmd) - 缓存只存字符串,AcDbObjectId 仍按当前图纸每次现解析,多文档切换 不串图层/线型 - 保持原语义:库打不开时 getColorByPipeSys 返回 256、getLtByPipeSys 与 getLyByPipeSys 返回空 id、getLwByPipeSys 返回 0 - 缓存生命周期等于进程,改系统样式配置需重启生效;静态对象用故意 不释放的指针持有,避免 DLL 卸载期析构顺序问题 - getPipeColorBySystem 未动:它的 SQL 不带 PIPESYS 过滤,语义与这 4 个 getter 不同,且唯一调用点已被注释 编译验证:R190 Debug 下 AecRxBase / CoreCommand_BAL_REMOTE / CoreLibrary_BAL_REMOTE / CoreImplement 全部通过。
Languages
C++
80.3%
C
19.4%
Inno Setup
0.1%