iT邦幫忙

0

VBScript 多次執行程式後,越來越慢的問題。

  • 分享至 

  • xImage

小弟請教一下,
當用VBScript程式控制一套商用軟體多次打開->執行動作->結束關閉。重複很多次後,商用軟體的執行動作越來越慢,到後來直接關閉。請幫忙解釋一下原理?以及該如何解決。謝謝。

ccutmis iT邦高手 2 級 ‧ 2023-04-01 12:32:21 檢舉
開啟工作管理員 觀察 VBScript 每次執行完畢後,是不是還在背景佔用資源(類似wscript.exe的東西),如果資源沒有釋放掉,一開始還在系統能承受的範圍,慢慢的愈佔愈多就會影響系統正常運作。
解決方式 : 建議改用 Python 處理 "控制一套商用軟體多次打開->執行動作->結束關閉"
jacky33 iT邦新手 5 級 ‧ 2023-04-01 14:20:25 檢舉
謝謝回覆。再請教
1. 這麼說 Python就不會背景佔用資源或是極少佔用資源?
2. 商用軟體多次打開->執行動作->結束關閉,它本身也會背景佔用資源?
謝謝。
ccutmis iT邦高手 2 級 ‧ 2023-04-01 15:04:43 檢舉
A1. 我以前還沒學 Python 也是用 VBS 處理一些檔案操作,執行完後看一下工作管理員就會看到裡面冒出很多個"wscript.exe" ,我指的佔用資源是這個部份,Python當然也是有可能發生,但至少在我寫的程式裡面這種情況很少。
A2. 軟體開啟執行一定是會佔用資源,結束的時候,我們希望它是把佔用的資源釋放掉,但是實際上是全部釋放掉或是有部份仍佔用這個要去觀察,沒法一概而論的,畢竟它不像VBS或PYTHON是直譯式程式,至少明面上你知道程式執行哪些動作。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
re.Zero
iT邦研究生 5 級 ‧ 2023-04-01 16:55:33
最佳解答

因為你的情境說明粗淺、 沒附上程式碼片段可供參考, 所以我假設: 若是使用 WSH (cscript.exe or wscript.exe) 執行 VBScript 檔案 (.vbs) 而啟動、 操作 MS-Excel 的情境下, 請開啟工作管理員(or tasklist, Get-Process)確認 Excel 行程是否已結束執行(除非你想要只關 Excel 檔案而不關 Excel 行程以供後續作業); 因為 Excel 視窗不見不代表 Excel 行程已結束, 常會有 Excel 行程卡在無法看見的提示訊息等異常狀況而維持等待的情形。 所以網路上常見到使用 objExcel.DisplayAlerts = False 等方法避開(或忽略) Excel 異常以關閉 Excel 行程。
( 另, 如果是操作網路上或網路分享的檔案, 還會牽涉到網路環境等各種狀況…… )

ccutmis大 所說 改用 Python 處理 的方式, 若是指使用 pywin32 等套件存取 Windows 相關 API 來控制 Excel 的方式, 基本上還是類似使用 WSH with VBScript 的方式, 都是啟動、 操作 Excel。 所以只要遇到 「 Excel 行程卡在無法看見的提示訊息等異常狀況而維持等待的情形 」, 那些維持等待的 Excel 行程還是會占用系統資源。
( 至於 ccutmis大 所說一堆 wscript.exe, 我倒是有點好奇是啥狀況; 畢竟我過去大多是處裡 Excel 等那端點的莫名其妙後就沒事了。 )

提醒, 以上敘述是基於我的假設情境下, 很有可能不符合你的狀況。 至於處理方式請自行 Google 你可能的狀況與方案。
( 因為可能原因很多, 我只是就我過去最常遇到的這種案例提出說明以供參考方向。 )

看更多先前的回應...收起先前的回應...
ccutmis iT邦高手 2 級 ‧ 2023-04-01 17:30:00 檢舉

至於 ccutmis 所說一堆 wscript.exe, 我倒是有點好奇是啥狀況

2023-04-01 17:25:28 我說 :
請問 VBScript 程式(.vbs) 執行結束 wscript.exe 仍在背景沒有結束的可能原因是什麼?

2023-04-01 17:25:46 ChatGPT說 :
可能的原因有以下幾點:

  1. 程式中使用了無限循環,使程式無法正常結束。
  2. 程式中使用了多執行緒,導致程式在結束後仍有某些執行緒未能正常結束。
  3. 程式中呼叫了外部應用程式或函式庫,這些外部應用程式或函式庫本身沒有正常結束,使得 wscript.exe 仍在背景執行。
  4. 網路問題,例如程式中有一段程式碼是在等待網路回應,但是網路出了問題,程式無法正常結束。
  5. 執行環境問題,例如系統已經發生故障,導致程式無法正常結束。

2023-04-01 17:27:23 我說 :
還有其它可能嗎?

2023-04-01 17:27:37 ChatGPT說 :
除了以上提到的原因之外,還有以下可能原因:

  1. 程式中使用了 Windows Script Debugger ,使得程序在调试器中运行,但是调试器没有正常关闭。
  2. 指定了一个不存在的文件路径,程序不知道如何处理该指定路径,导致程序无法正常结束。
  3. 系统资源紧张,例如内存、CPU 使用率过高,导致程序无法正常结束。
  4. 程序中使用了 COM 组件,COM 組件雖然已經結束了,但是 wscript.exe 仍在背景运行。
  5. 程式开发缺陷,例如错误的程序逻辑,导致程序无法正常结束。

假設 VBS 在執行後沒有正常結束 wscript.exe ,又頻繁的執行 VBS(如樓主描述),就會有一堆 wscript.exe 在背景了...

jacky33 iT邦新手 5 級 ‧ 2023-04-01 19:08:20 檢舉

謝謝各位大的解釋。

jacky33 iT邦新手 5 級 ‧ 2023-04-01 22:05:36 檢舉

目前看起來的狀況是,感覺不是VBS的問題。查看背景資源後,沒有一個占用大的資源。
反倒是應用程式,那個商用軟體的CPU %數隨著處理project數越多。它的CPU占用一直往上加。再想想該如何解決這問題。

re.Zero iT邦研究生 5 級 ‧ 2023-04-01 23:50:04 檢舉

@jacky33:
看到你的回報(感謝滿足我的好奇心~), 忽然想起, 為避免你誤解, 提醒一下: 就算是被控制的軟體行程有異常, 問題亦可能是出在 VBScript 的控制敘述有問題而導致軟體行程異常。
( 畢竟各種軟體都常有各自的設計邏輯或習慣, 很多人都沒先了解軟體 API 等的結構或流程概要就因為誤會而遇上各種異常。 )
建議你找找該商業軟體的 API 等相關文件, 以幫助釐清問題。

jacky33 iT邦新手 5 級 ‧ 2023-04-03 15:15:24 檢舉

謝謝re.Zero 大的解釋。
小弟非本科系,程式靠自學。"商業軟體的 API 等相關文件"我再好好研究一下。
順道請問一句,如果我想要將商業軟體的佔用資源釋放(我知道將商用軟體直接關掉再打開是最直接的方法)。那我會去查商用軟體的使用手冊或Google。有沒有相關的"專業關鍵字"可以提供給我方便查詢?謝謝。

re.Zero iT邦研究生 5 級 ‧ 2023-04-04 21:13:57 檢舉

@jacky33:
如果你有需要, 在軟體設計上的相關基本概念, 可參考一下 Garbage collection ( 垃圾回收 ) 。
至於在查詢的關鍵字上, 各家有各家為了各種面向的最佳化或理念而有著各樣的設計與用詞, 我很難提出適當的建議; 我個人的話, 在瀏覽 API 文件以外 ( 先了解概要資訊以便在尋思時有個底~ ), 就是賭運氣在估狗上: 「軟體英文名 (因為英文資訊較多且完備) + 資源控管相關關鍵字 (例如 GC(Garbage collection), CPU/memory usage/release, Caching, ...)」。 願你遇上的不是啥神奇狀況~

jacky33 iT邦新手 5 級 ‧ 2023-04-05 13:02:29 檢舉

感謝回覆。

我要發表回答

立即登入回答