C # Excel автоматизация вызывает утечку памяти Excel

Я пытаюсь использовать C # с библиотекой COM Interop, чтобы открыть набор очень тяжелых книг Excel. Я должен использовать C #, потому что мне также нужно запускать макросы, перемещать некоторые ячейки и запускать пользовательские надстройки Excel, используемые моей компанией.

Моя программа завершает работу, оставляя рабочие книги открытыми, каждая в отдельном экземпляре Excel. Я не хочу, чтобы книги закрывались при выходе из программы.

Проблема в том, что когда моя программа на C # выходит из системы, со временем книги Excel постепенно занимают больше памяти, пока непотребляет 3,5 гигабайта памяти с оригинальных 500 мб.

Раньше я открывал книги вручную, а листы никогда не занимали столько памяти. Как только я начал открывать их с помощью 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;

Ответы на вопрос(1)

Ваш ответ на вопрос