COM Interop ライブラリで C# を使用して、一連の非常に重い Excel ワークブックを開こうとしています。C# を使用する必要があります。これは、マクロを開始し、いくつかのセルを移動し、会社で使用するカスタム Excel アドインを開始する必要があるためです。
その後、私のプログラムは終了し、ワークブックを開いたまま、それぞれ別の Excel インスタンスで開きます。プログラムの終了時にワークブックを閉じたくありません。
問題は、私の C# プログラムが終了すると、時間の経過とともに、元の 500 MB から 3.5 ギガのメモリを消費するまで、Excel ワークブックが徐々に多くのメモリを消費することです。
以前はワークブックを手動で開いていましたが、シートがそれほど多くのメモリを消費することはありませんでした。C# を使用してそれらを開き始めると、極端なメモリ使用量のために破損し始めました。私の理論では、COM Excel オブジェクトを操作すると、どういうわけかメモリ リークが発生するということです。
以下は私の元のコードです:
using Excel = Microsoft.Office.Interop.Excel;
...
excelApp = new Excel.Application();
excelApp.Visible = true;
excelApp.Workbooks.Open(filename, misValue, misValue, misValue, misValue, misValue,
true, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue);
excelApp.Calculation = Excel.XlCalculation.xlCalculationAutomatic;
Marshal を使用して使用を解放する方法について読んだので、次のコードを試していますが、すべてのシートを開いてデータを消費しすぎないかどうかを確認する以外に簡単にテストする方法はありません。
excelApp = new Excel.Application();
excelApp.Visible = true;
Excel.Workbooks currWorkbooks = excelApp.Workbooks;
Excel.Workbook currWorkbook = currWorkbooks.Open(filename, misValue, misValue, misValue, misValue, misValue,
true, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue);
//excelApp.Calculation = Excel.XlCalculation.xlCalculationAutomatic;
int x = Marshal.ReleaseComObject(currWorkbook);
currWorkbook = null;
int y = Marshal.ReleaseComObject(currWorkbooks);
currWorkbooks = null;