perf: 副实例关闭改直接 Kill(消除'模型已修改'弹窗 10 秒阻塞)

根因:副实例检测(动画/高亮)修改了文档 → 优雅关闭(CloseMainWindow)
触发 NW 原生'模型文件已修改,是否保存'模态弹窗 → WaitForExit(10s) 超时
→ Kill——每任务浪费约 10 秒。

修复:副实例是临时检测进程(检测已完成、报告已回传)——直接 Kill
(TerminateProcess 不触发弹窗);进程退出后句柄释放(WaitForExit 5s),
工作目录清理重试机制不受影响。

验证:F1 任务 60 秒完成(含副实例启动+就绪+检测),关闭秒级无弹窗
This commit is contained in:
tian 2026-08-06 23:46:00 +08:00
parent 1700eeaa52
commit 033b639121

View File

@ -252,18 +252,21 @@ namespace NavisworksTransport.Core.Services
{
if (!process.HasExited)
{
process.CloseMainWindow();
if (!process.WaitForExit(10000))
{
// 🔥 直接强制关闭(不优雅退出):副实例是临时检测进程(检测已完成、报告已回传),
// 动画/高亮修改过文档 → 优雅关闭会弹出“模型文件已修改,是否保存”对话框,
// 模态弹窗阻塞 WaitForExit 直到超时10 秒)——拖慢批处理。
// KillTerminateProcess不触发该弹窗句柄由进程退出释放下方 WaitForExit 等待)。
process.Kill();
LogManager.Warning($"[实例管理] 副实例未优雅退出,已强制关闭(端口 {handle.Port}");
if (!process.WaitForExit(5000))
{
LogManager.Warning($"[实例管理] 副实例强杀后未及时退出(端口 {handle.Port}");
}
}
// 确保进程完全退出(释放模型文件句柄,供调用方清理工作目录)
if (!process.HasExited)
{
process.WaitForExit(10000);
process.WaitForExit(5000);
}
}
catch (Exception ex)