积极答复者
Vb2008引用Excel名字命名空间之后对于资源释放的问题

问题
-
Vb2008引用Excel名字命名空间之后,使用Dim exl As New Excel.Application声明Excel对象,然后执行其他事情之后,最后exl = Nothing。同时我打开的Excel文件也关闭了,但是我没运行一次程序,在任务管理器的进程中就会出现一个Excel.exe的进程,运行次数多了之后进程中有很多这个进程,请问怎么解决这个问题呢?谢谢!
- 已移动 Sheng Jiang 蒋晟Moderator 2010年9月19日 14:51 (发件人:Visual Basic)
答案
-
你好
或者你可以嘗試這個方法
就是在所有你有 用 Microsoft.Office.Interop.Excel namespace define 的 variable
你也用System.Runtime.InteropServices.Marshal.ReleaseComObject(exl ) exl = Nothing 方法
E.G.
Dim ExcelApp As Microsoft.Office.Interop.Excel.Application
Dim ExcelWorkBook As Microsoft.Office.Interop.Excel.Workbook
Dim ExcelWorkSheet As Microsoft.Office.Interop.Excel.Worksheet
Dim CellRange As Microsoft.Office.Interop.Excel.Range
ReleaseExcelObject(CellRange)
ReleaseExcelObject(ExcelApp)
ReleaseExcelObject(ExcelWorkBook)
ReleaseExcelObject(ExcelWorkSheet)
Private Shared Sub ReleaseExcelObject(ByVal obj As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
obj = Nothing
Catch ex As Exception
obj = Nothing
Finally
GC.Collect()
End Try
End Sub
去整理他
應該可以解決這個問題
如果都不能的話
你介不介意Post 你的Code 上來給我們參考?
Please correct me if my concept is wrong
Chi- 已标记为答案 宋翔Moderator 2011年4月10日 19:30
全部回复
-
你好
或者你可以嘗到用以下的Code 看看能不能释放资源
Try System.Runtime.InteropServices.Marshal.ReleaseComObject(exl ) exl = Nothing Catch ex As Exception exl = Nothing Finally GC.Collect() End Try
Please correct me if my concept is wrong
Chi -
你好
或者你可以嘗試這個方法
就是在所有你有 用 Microsoft.Office.Interop.Excel namespace define 的 variable
你也用System.Runtime.InteropServices.Marshal.ReleaseComObject(exl ) exl = Nothing 方法
E.G.
Dim ExcelApp As Microsoft.Office.Interop.Excel.Application
Dim ExcelWorkBook As Microsoft.Office.Interop.Excel.Workbook
Dim ExcelWorkSheet As Microsoft.Office.Interop.Excel.Worksheet
Dim CellRange As Microsoft.Office.Interop.Excel.Range
ReleaseExcelObject(CellRange)
ReleaseExcelObject(ExcelApp)
ReleaseExcelObject(ExcelWorkBook)
ReleaseExcelObject(ExcelWorkSheet)
Private Shared Sub ReleaseExcelObject(ByVal obj As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
obj = Nothing
Catch ex As Exception
obj = Nothing
Finally
GC.Collect()
End Try
End Sub
去整理他
應該可以解決這個問題
如果都不能的話
你介不介意Post 你的Code 上來給我們參考?
Please correct me if my concept is wrong
Chi- 已标记为答案 宋翔Moderator 2011年4月10日 19:30