2016-07-20 17 views
1

私のプログラムは基本的にExcelアセンブリを使用してファイルを開き、その情報を配列リストに格納する形式です。VB.Net、Excelアセンブリを使用して、メモリリーク

私のプログラムを複数回実行した後、私はタスクマネージャーから複数のExcelファイルが開いていることが分かりましたが、タスクバーから隠されています。さらに、「システムと圧縮メモリ」は毎回より多くのスペースを占有します。

私は適切にメモリを解放していなかったことを前提としていますが、私は私が現在持っているか、確認していない:

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

注:shxlワークシートで、wbxlはワークブックで、appxlアプリケーションです。

すべてのヘルプはここ

+0

[これにはたくさんの応答がありますuestion](http://stackoverflow.com/search?q=close+excel+interop)を参照してください。他の図書館を見ることをお勧めします。私はしばしばinteroptに問題があり、それは非常に遅いです。 –

答えて

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ブックを閉じるとき保存されていない変更があれば、存在しないユーザーが「変更を保存」ダイアログに「はい」または「いいえ」をクリックすると、オブジェクトがハングアップする可能性があります。

+0

私は問題を抱えています.Excel入力の1つに複数のシートがあり、wbxl.close()がコードを壊してしまいます。 –

+0

* WorkBooks *は複数の* WorkSheets *を持つことができ、 'wbxl.Close'を呼び出すとすべてを閉じるようになります –

+0

編集:実際には複数のシートがあるため、wbxl.closeが動作するようです私は複数のシートをチェックします。 私はwbxl.closeを削除しました。他のものはすべてうまくいくようです。 –

関連する問題