【发布时间】:2020-06-02 20:31:43
【问题描述】:
我有一些运行数小时的 Excel VBA 宏。宏执行数百万次 COM 调用以从 CAD 应用程序获取一些信息,处理一些数字,然后对同一个 CAD 应用程序进行其他数百万次 COM 调用以创建一些绘图。宏每秒将状态和进度写入文本文件。
我有一个 Python 进程,它检查进度文件是否在最后几秒钟内更新,如果不是,它将杀死 Excel 和 CAD 并通知失败。
问题是,每隔 10 或 20 分钟,我会在任务管理器中看到一个 svchost.exe 进程,它会在几秒钟内占用 100% 的内核,Excel CPU 使用率下降到零,并且大多数(不是全部)应用程序变为没有反应。当 svchost.exe 回到 0% 时,Excel 重新开始运行并继续其工作。
多年来,一切都运行良好,但最近我们开始处理更大的绘图,并且 svchost.exe 开始让 Excel 成为人质的时间越来越长。
我将超时时间从 20 秒增加到 40 秒,然后增加到 60 秒。但我只是有几个实例,其中 svchost.exe 需要超过一分钟才能完成它的工作。
如果我右键单击任务管理器上的 svchost.exe 进程,然后在“转到服务”上,我会看到两个突出显示的服务:“RPC 端点映射器”和“远程过程调用 (RPC)”。
我尝试每 10 秒添加一个 3 秒的暂停,希望 svchost.exe 能利用空闲时间,但没有帮助。
暂停似乎发生在随机时刻,通常是当 Excel 将数据加载到大型集合中时,有时是 2 到 3 次,同时集合的大小会增加,或者当大型集合超出范围时。
我不喜欢在不知道原因和什么是好的值的情况下增加超时。
有没有办法避免这些长时间的停顿?
【问题讨论】:
-
(1) 为什么是近距离投票? (2) 为什么不发表评论就投票结束?