diag: 拆分"写临时文件"与"acisIn"计时,判定内存读取不值得做 #105

Merged
gjm merged 1 commits from company-desktop/company-desktop-computer/diag-inmemory-verdict AGit into main 2026-10-28 22:11:35 +08:00
Collaborator

修完回写后开图期仍有 1733 次临时文件写入,需要判断"改内存读取"能省多少。

在 RegionAcisInDwgInFields 与 CoreTools::StringToRegion 两个重载里,把
"写临时文件+关闭"和"AcDbBody::acisIn"拆成独立计时(RegIn.write / RegIn.acisIn /
Str2Reg.write / Str2Reg.acisIn)。

实测(big1.dwg,93 s 开图,1733 次未命中):
RegIn.write 374 次 70.5 ms 189 us
RegIn.acisIn 374 次 1422.0 ms 3.80 ms
Str2Reg.write 1359 次 267.7 ms 197 us
Str2Reg.acisIn 1359 次 5999.5 ms 4.41 ms

结论:写文件合计 338 ms,只占 9.6 s 恢复耗时的 3.5%;杀软扫描已在 write 的 190 us 里
(Defender 在关闭时扫)。即使完全省掉文件往返,上限也只有 0.30.5 s(开图的 0.4%)。
而 AcDbBody::acisIn 在 R19
R26 只有文件名重载,真要内存解析只能改存盘格式走
acdbModelerRestoreEntityFromDwgFiler(即暂缓的 Phase 3)。因此不做。

剩余 7.4 s 是纯解析(1733 次 × 4.3 ms),只能靠减少次数;text 通道 1560 个唯一文本
是真实不同的截面,命中率已接近上限。继续提速应转向 Parasolid 绘制那条线。

数据与结论已写入 pipe-section-region-performance-plan.md。
本次只加诊断计时(Debug + AEC_PERF_COUNTER=1 才生效),不改任何业务行为。

修完回写后开图期仍有 1733 次临时文件写入,需要判断"改内存读取"能省多少。 在 RegionAcisInDwgInFields 与 CoreTools::StringToRegion 两个重载里,把 "写临时文件+关闭"和"AcDbBody::acisIn"拆成独立计时(RegIn.write / RegIn.acisIn / Str2Reg.write / Str2Reg.acisIn)。 实测(big1.dwg,93 s 开图,1733 次未命中): RegIn.write 374 次 70.5 ms 189 us RegIn.acisIn 374 次 1422.0 ms 3.80 ms Str2Reg.write 1359 次 267.7 ms 197 us Str2Reg.acisIn 1359 次 5999.5 ms 4.41 ms 结论:写文件合计 338 ms,只占 9.6 s 恢复耗时的 3.5%;杀软扫描已在 write 的 190 us 里 (Defender 在关闭时扫)。即使完全省掉文件往返,上限也只有 0.3~0.5 s(开图的 0.4%)。 而 AcDbBody::acisIn 在 R19~R26 只有文件名重载,真要内存解析只能改存盘格式走 acdbModelerRestoreEntityFromDwgFiler(即暂缓的 Phase 3)。因此不做。 剩余 7.4 s 是纯解析(1733 次 × 4.3 ms),只能靠减少次数;text 通道 1560 个唯一文本 是真实不同的截面,命中率已接近上限。继续提速应转向 Parasolid 绘制那条线。 数据与结论已写入 pipe-section-region-performance-plan.md。 本次只加诊断计时(Debug + AEC_PERF_COUNTER=1 才生效),不改任何业务行为。
company-desktop added 1 commit 2026-10-28 22:09:48 +08:00
修完回写后开图期仍有 1733 次临时文件写入,需要判断"改内存读取"能省多少。

在 RegionAcisInDwgInFields 与 CoreTools::StringToRegion 两个重载里,把
"写临时文件+关闭"和"AcDbBody::acisIn"拆成独立计时(RegIn.write / RegIn.acisIn /
Str2Reg.write / Str2Reg.acisIn)。

实测(big1.dwg,93 s 开图,1733 次未命中):
  RegIn.write    374 次    70.5 ms   189 us
  RegIn.acisIn   374 次  1422.0 ms  3.80 ms
  Str2Reg.write 1359 次   267.7 ms   197 us
  Str2Reg.acisIn 1359 次 5999.5 ms  4.41 ms

结论:写文件合计 338 ms,只占 9.6 s 恢复耗时的 3.5%;杀软扫描已在 write 的 190 us 里
(Defender 在关闭时扫)。即使完全省掉文件往返,上限也只有 0.3~0.5 s(开图的 0.4%)。
而 AcDbBody::acisIn 在 R19~R26 只有文件名重载,真要内存解析只能改存盘格式走
acdbModelerRestoreEntityFromDwgFiler(即暂缓的 Phase 3)。因此不做。

剩余 7.4 s 是纯解析(1733 次 × 4.3 ms),只能靠减少次数;text 通道 1560 个唯一文本
是真实不同的截面,命中率已接近上限。继续提速应转向 Parasolid 绘制那条线。

数据与结论已写入 pipe-section-region-performance-plan.md。
本次只加诊断计时(Debug + AEC_PERF_COUNTER=1 才生效),不改任何业务行为。
gjm approved these changes 2026-10-28 22:11:32 +08:00
gjm merged commit dffee29702 into main 2026-10-28 22:11:35 +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#105