perf: 增加截面恢复路径的 Phase 0 计数器(Debug 探针) #97

Merged
gjm merged 1 commits from company-desktop/company-desktop-computer/perf-section-counter AGit into main 2026-10-28 19:47:10 +08:00
Collaborator

按 pipe-section-region-performance-plan.md 的 Phase 0 落地。目的不是提速,而是先拿到
三个决定性数字,再判断截面缓存(Phase 1)到底值不值得做:

  1. 每次截面恢复多贵(µs),一次开图共多少次;
  2. 同一份 SAT 文本被重复恢复多少次(唯一 hash 数 / 模拟命中率)——直接决定缓存收益上限;
  3. 临时文件写入次数与字节数(杀软扫描影响面),以及打开图纸时的回写次数。

改动:

  • 新增 inc/SectionPerfCounter.h + CoreLibrary/SectionPerfCounter.cpp
    • Scope(QPC 计时)+ NoteRegionText(FNV-1a 64 位 hash,统计唯一数与模拟命中)
      • NoteTempFile + NoteWriteBack + Dump/Reset
    • 计数器实例放在函数内 static:CoreLibrary 是静态库且只被 CoreCommand 链接,
      所以 CoreCommand.arx 里只有一份,两个入口共用
  • AecDbEwPipeBase.cpp:RegionAcisInDwgInFields / RegionAcisoutDwgOutFields 接入
  • CoreTools.cpp:StringToRegion 两个重载 / RegionToString 接入
  • EarthWorm.cpp:注册 ENVIPERFDUMP / ENVIPERFRESET(仅 Debug)
  • CoreLibrary/cmakelists.txt 加一个源文件
  • 计划文档的 Phase 0 补上实际命令与采集项

开关:启动 CAD 前 set AEC_PERF_COUNTER=1;命令 ENVIPERFDUMP 打印并追加到
%TEMP%\aec_section_perf.txt,ENVIPERFRESET 清零。
Release 下 Enabled() 恒为 false,调用点只剩一次 bool 判断。

不改任何几何逻辑与存盘格式。

验证:R230 Debug 编译通过(CoreLibrary_BAL_REMOTE、CoreCommand_BAL_REMOTE,无新增 warning),
产物已自动部署到 c:\ShangHuaSoft\Envi3D-2026-M\R230\。
R190 未在本机编译(缺 v100 工具集);代码刻意只用 C++98 特性,控制台输出改走 %hs,
避开了 &wstring[0] 这类老 STL 上的写法问题。
尚未做 CAD 实测:需要开图后跑 ENVIPERFDUMP 才看得到数据。

按 pipe-section-region-performance-plan.md 的 Phase 0 落地。目的不是提速,而是先拿到 三个决定性数字,再判断截面缓存(Phase 1)到底值不值得做: 1) 每次截面恢复多贵(µs),一次开图共多少次; 2) 同一份 SAT 文本被重复恢复多少次(唯一 hash 数 / 模拟命中率)——直接决定缓存收益上限; 3) 临时文件写入次数与字节数(杀软扫描影响面),以及打开图纸时的回写次数。 改动: - 新增 inc/SectionPerfCounter.h + CoreLibrary/SectionPerfCounter.cpp - Scope(QPC 计时)+ NoteRegionText(FNV-1a 64 位 hash,统计唯一数与模拟命中) + NoteTempFile + NoteWriteBack + Dump/Reset - 计数器实例放在函数内 static:CoreLibrary 是静态库且只被 CoreCommand 链接, 所以 CoreCommand.arx 里只有一份,两个入口共用 - AecDbEwPipeBase.cpp:RegionAcisInDwgInFields / RegionAcisoutDwgOutFields 接入 - CoreTools.cpp:StringToRegion 两个重载 / RegionToString 接入 - EarthWorm.cpp:注册 ENVIPERFDUMP / ENVIPERFRESET(仅 Debug) - CoreLibrary/cmakelists.txt 加一个源文件 - 计划文档的 Phase 0 补上实际命令与采集项 开关:启动 CAD 前 set AEC_PERF_COUNTER=1;命令 ENVIPERFDUMP 打印并追加到 %TEMP%\aec_section_perf.txt,ENVIPERFRESET 清零。 Release 下 Enabled() 恒为 false,调用点只剩一次 bool 判断。 不改任何几何逻辑与存盘格式。 验证:R230 Debug 编译通过(CoreLibrary_BAL_REMOTE、CoreCommand_BAL_REMOTE,无新增 warning), 产物已自动部署到 c:\ShangHuaSoft\Envi3D-2026-M\R230\。 R190 未在本机编译(缺 v100 工具集);代码刻意只用 C++98 特性,控制台输出改走 %hs, 避开了 &wstring[0] 这类老 STL 上的写法问题。 尚未做 CAD 实测:需要开图后跑 ENVIPERFDUMP 才看得到数据。
company-desktop added 1 commit 2026-10-28 19:31:31 +08:00
按 pipe-section-region-performance-plan.md 的 Phase 0 落地。目的不是提速,而是先拿到
三个决定性数字,再判断截面缓存(Phase 1)到底值不值得做:
1) 每次截面恢复多贵(µs),一次开图共多少次;
2) 同一份 SAT 文本被重复恢复多少次(唯一 hash 数 / 模拟命中率)——直接决定缓存收益上限;
3) 临时文件写入次数与字节数(杀软扫描影响面),以及打开图纸时的回写次数。

改动:
- 新增 inc/SectionPerfCounter.h + CoreLibrary/SectionPerfCounter.cpp
  - Scope(QPC 计时)+ NoteRegionText(FNV-1a 64 位 hash,统计唯一数与模拟命中)
    + NoteTempFile + NoteWriteBack + Dump/Reset
  - 计数器实例放在函数内 static:CoreLibrary 是静态库且只被 CoreCommand 链接,
    所以 CoreCommand.arx 里只有一份,两个入口共用
- AecDbEwPipeBase.cpp:RegionAcisInDwgInFields / RegionAcisoutDwgOutFields 接入
- CoreTools.cpp:StringToRegion 两个重载 / RegionToString 接入
- EarthWorm.cpp:注册 ENVIPERFDUMP / ENVIPERFRESET(仅 Debug)
- CoreLibrary/cmakelists.txt 加一个源文件
- 计划文档的 Phase 0 补上实际命令与采集项

开关:启动 CAD 前 set AEC_PERF_COUNTER=1;命令 ENVIPERFDUMP 打印并追加到
%TEMP%\aec_section_perf.txt,ENVIPERFRESET 清零。
Release 下 Enabled() 恒为 false,调用点只剩一次 bool 判断。

不改任何几何逻辑与存盘格式。

验证:R230 Debug 编译通过(CoreLibrary_BAL_REMOTE、CoreCommand_BAL_REMOTE,无新增 warning),
产物已自动部署到 c:\ShangHuaSoft\Envi3D-2026-M\R230\。
R190 未在本机编译(缺 v100 工具集);代码刻意只用 C++98 特性,控制台输出改走 %hs,
避开了 &wstring[0] 这类老 STL 上的写法问题。
尚未做 CAD 实测:需要开图后跑 ENVIPERFDUMP 才看得到数据。
gjm approved these changes 2026-10-28 19:47:06 +08:00
gjm merged commit 6c090b5636 into main 2026-10-28 19:47:10 +08:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gjm/envi-code#97