VB.Net,利用Excel程序集,内存泄漏

时间:2016-07-20 13:30:50

标签: vb.net excel excel-vba memory-leaks vba

我的程序本质上是一个使用excel程序集打开文件并将信息放入数组列表的表单。

在运行我的程序多次迭代后,我发现在任务管理器中我仍然打开了多个excel文件,尽管它们在我的任务栏中隐藏了。此外,“系统和压缩内存”每次占用更多空间。

我认为我没有正确释放内存,但我不确定如何,我目前有:

shXL = Nothing
wbXl = Nothing
appXL.Quit()
appXL = Nothing

注意:shxl是工作表,wbxl是工作簿,appxl是应用程序。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

这是一些完全正常的开放和关闭代码

Private _xlApp As Microsoft.Office.Interop.Excel.Application
Private _xlWSheet As Microsoft.Office.Interop.Excel.Worksheet
Private _xlWBook As Microsoft.Office.Interop.Excel.Workbook

Private Sub btnOpen_Click(sender As Object, e As EventArgs) Handles btnOpen.Click
    Dim filename As String = "C:\Scratch\Test.xlsx"
    _xlApp = New Microsoft.Office.Interop.Excel.Application
    _xlApp.DisplayAlerts = False
    _xlWBook = _xlApp.Workbooks.Open(filename)
End Sub

Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
    'close the workbook and quit the app
    If _xlWBook IsNot Nothing Then _xlWBook.Close()
    If _xlApp IsNot Nothing Then _xlApp.Quit()
    'destroy the objects
    If _xlWSheet IsNot Nothing Then _xlWSheet = Nothing
    If _xlWBook IsNot Nothing Then _xlWBook = Nothing
    If _xlApp IsNot Nothing Then _xlApp = Nothing

    'Force garbage collection
    GC.Collect()
End Sub

另请注意,如果您设置:_xlApp.DisplayAlerts = False,那么当您关闭工作簿时,如果您有任何未保存的更改,这将等待不存在的用户单击是或否则“保存更改”对话框可能会导致对象挂起