要改看看直接全部釋放的作法
改成每次new 一個 App
然後執行完畢該 App 釋放資源
=========================================
轉Excel檔案,何時應該收回Application資源,
改成每次new 一個 App
然後執行完畢該 App 釋放資源
資料匯出EXCEL後,EXCEL程式並未關閉(至Windows工作管理員查看,EXCEL.EXE還在)
可以釋放資源˙,但目前測試一樣是全部釋放,
沒辦法說找到關鍵的Excel去釋放
如果使用者有自己開起不再系統下的Excel
將會一起被關掉
XlsClose()呼叫的時機為何,
目前掛在系統下,
某個Form頁籤關閉後執行
=========================================
轉Excel檔案,何時應該收回Application資源,
用的方法好像就算關閉Excel,系統管理員上也不會close掉
要查一查
嘗試從程式關閉上,一併去關閉Excel
或是說使用者只要開一個APP,就開一個APP給他
而不是說全部都放再同一個APP
大概知道了
應該是變數宣告的時候,
因為我把toXls的東西放在Module
他只會宣告一次
我關掉的
永遠是找那個第一次,
所以後面的就會一直找不到程序去關掉
變成說我每次轉檔的時候
都要透過宣告變數的方式
而不是公用變數
這樣就能有效的關閉Excel APP
===============================================
這方式不太確定會不會有什麼風險~
'查找資源,並且釋放
Call KillProcess("EXCEL")
'以程序名稱,查找還剩下哪些資源尚未釋放
Private Sub KillProcess(ByVal ProcName As String)
Dim thisProc As System.Diagnostics.Process
Dim allRelationalProcs() As Process = System.Diagnostics.Process.GetProcessesByName(ProcName)
For Each thisProc In allRelationalProcs
Try
If Not thisProc.CloseMainWindow() Then
thisProc.Kill()
End If
Catch ex As Exception
MsgBox(ex.GetBaseException.ToString)
End Try
Next
End Sub
'關閉 Excel ,釋放所有 APP 資源
Private Sub NAR(ByVal o As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(o)
Catch e As Exception
MsgBox("關閉 Excel, 發生例外事件!!")
Finally
o = Nothing
End Try
End Sub
沒有留言:
張貼留言