Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net Net,利用Excel程序集,内存泄漏_Vb.net_Excel_Memory Leaks_Vba - Fatal编程技术网

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

Vb.net Net,利用Excel程序集,内存泄漏,vb.net,excel,memory-leaks,vba,Vb.net,Excel,Memory Leaks,Vba,我的程序本质上是一个表单,它使用excel程序集打开文件并将信息放入数组列表中 在多次迭代运行我的程序之后,我发现在TaskManager中,我有多个excel文件仍然处于打开状态,尽管它们在我的任务栏中是隐藏的。此外,“系统和压缩内存”每次占用更多空间 我假设我没有正确释放内存,但我不确定如何释放,我目前有: shXL = Nothing wbXl = Nothing appXL.Quit() appXL = Nothing 注意:shxl是工作表,wbxl是工作簿,appxl是应用程序 任

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

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

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

shXL = Nothing
wbXl = Nothing
appXL.Quit()
appXL = Nothing
注意:shxl是工作表,wbxl是工作簿,appxl是应用程序


任何帮助都将不胜感激

以下是一些完全有效的打开和关闭代码

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

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

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

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

我有问题,其中一个excel输入有多个工作表,wbxl.close()会破坏代码。根据定义,工作簿可以有多个工作表,调用
wbxl.close
将尝试关闭所有工作表:实际上我不确定这是否是因为有多个工作表,wbxl.close似乎在一种形式下工作,但在我检查多张工作表的另一种形式下不工作。我删除了wbxl.close,其他一切似乎都很好,所以我想挂起的原因是wbxl.close在关闭所有工作表时出现问题?在这种情况下,是否应该使用不同的语法?请查看编辑,它现在包含了您需要的所有内容。我有一个问题,一个excel输入有多个工作表,wbxl.close()中断了代码。工作簿根据定义可以有多个工作表,调用
wbxl.Close
将尝试关闭所有工作表:实际上我不确定这是否是因为有多张工作表,wbxl.Close似乎在一种形式下工作,但在另一种形式下,我检查多张工作表。我删除了wbxl.close,其他一切似乎都很好,所以我想挂起的原因是wbxl.close在关闭所有工作表时出现问题?在这种情况下是否应该使用不同的语法?请查看编辑,其中包含了您需要的所有内容。我建议你去别的图书馆看看。我经常遇到interopt的问题,而且速度很慢。。我建议你去别的图书馆看看。我经常遇到interopt的问题,它非常慢。