制作solidworks插件 装配体导出展开耗时分析

根据你这份日志,可以把 414 秒(约 6.9 分钟) 的耗时拆清楚如下。

总览(asm2do_summary

阶段 累计 ms 占比(相对 asm2do 399.6s)
关闭 CloseDoc 211,738 53%
回调 action(K检查+折弯修正+展开导出) 170,187 43%
打开 OpenDoc 1,014 <1%
分类 50 可忽略
合计 asm2do 399,640
会话总耗时 414,088 含前后开销

队列 42 件 :钣金处理 22 ,跳过 20(非钣金/管件等)。


1. 最大瓶颈:每件关闭约 5 秒

close_ms 几乎稳定在 4770~5390ms,不论是否真正导出:

  • 跳过的 part_skip(只打开→分类→关闭):total ≈ 5.0~5.4s,几乎全是关闭
  • 已导出的 partclose ≈ 5.1~5.4s,和 action 无关

推算:42 次 CloseDoc × ~5s ≈ 210s ,与日志里的 211,738ms 一致。

也就是说:一半时间花在关文件上 ,而且非钣金件也被打开再关掉,白占 20 × 5s ≈ 100s


2. 第二瓶颈:展开导出(export_ms

22 件钣金里,单件 export_ms 大约 6.2~8.3s (多数 6.3~7.1s),是 action 里的主体。

典型一件):

步骤 ms
K检查 25
折弯修正 fix_bends 1,804
展开导出 export 8,253
回调小计 ~10,082
关闭 5,270
本件合计 15,637

fix_bends 多数在 0.4~2.5s ,个别到 2.4skcheck 可忽略。

22 件 ×(export ~7s + fix ~1s)≈ 170s ,与 action_ms 总和吻合。


3. 非钣金跳过:纯浪费打开/关闭

例如 滚筒08A-1open=358ms, category=1ms, close=4734ms → 为判「其他」花了 5.3s ,其中 89% 在关闭

20 件跳过若用 BOM 缓存类型、不再 OpenDoc ,理论上可省约 ~100s (约 25% 总耗时)。


4. 优化优先级(按收益)

  1. 跳过件不要打开零件

    asm2bom 缓存里的 PartType/Category(导出 BOM 时已有)判断钣金,只对「钣金件 / 钣金件展开错误」走 OpenDoc。

    → 预计省 ~100s

  2. 查清 CloseDoc 为何 ~5s/次

    当前 partDoc.Visible = true,关文档可能触发重建/保存提示/界面刷新。可尝试:

    • 批量时 Visible = false
    • 关前 swApp.CloseDoc 是否可配合 swCloseDocOptions
    • 是否因 fix_bends 改特征导致关闭时重建
      → 若关闭降到 1s,22 件钣金再省 ~80~90s
  3. 一键导出可选跳过 fix_bends_kcheck

    出图状态页若只关心 DWG,折弯修正 ~0.4~2.5s/件 × 22 ≈ 10~55s

  4. export_ms(ExportToDWG + 展开重建)

    属 SolidWorks API,单件 6~8s 难大幅压缩;多实体件会更长。


5. 会话后半段

你贴的片段只到 asm2export 结束;若页面上还点了刷新,后面还会有 refresh_part_drawing_status(整遍 asm2bom + 展开 DWG 磁盘扫描),可能再占 1~3 分钟 ,需要看同文件里下一段 # SESSION_BEGIN operation=refresh_part_drawing_status


结论 :当前慢,主要是 「每件关文档 ~5s」× 42 + 「每件展开导出 ~7s」× 22 ;最先值得改的是 非钣金不打开缩短 CloseDoc

如果你愿意,我可以直接改代码:用 BOM 缓存跳过非钣金的 Open/Close,并加批量时 Visible=false 试一版。

相关推荐
LuminousCPP2 分钟前
从零开始学 C++|系列开篇:从 C 到 C++ 的衔接之路
开发语言·c++·笔记
超梦dasgg3 分钟前
Java 生产环境分布式定时任务全解(实战落地版)
java·开发语言·分布式
Legendary_0084 分钟前
18-30W 便携照明设备 USB-C PD 升级:选型与设计要点
c语言·开发语言
破土士V9 分钟前
Java基础知识集合
java·开发语言
keykey6.10 分钟前
从感知机到神经网络:深度学习的起源
开发语言·人工智能·深度学习·机器学习
ZC跨境爬虫12 分钟前
跟着 MDN 学JavaScript day_5:技能测试——变量实战
java·开发语言·前端·javascript
星恒随风12 分钟前
C++ 类和对象入门(一):从 class、访问限定符到 this 指针
开发语言·c++·笔记·学习·状态模式
Brilliantwxx16 分钟前
【C++】 哈希表 unordered_map 与 unordered_set(底层原理 + 线性哈希表代码实现)
开发语言·c++·散列表
瑞雪兆丰年兮16 分钟前
[0开始学Java|第二十四天]集合(Map&可变参数&集合工具类Collections)
java·开发语言·map·collections
专注VB编程开发20年22 分钟前
开发VS2026插件最佳方案:老式VSIX EnvDTE
ide·c#·visual studio