C # Excel automação causa vazamento de memória do Excel

Eu estou tentando usar c # com a biblioteca de interoperabilidade COM para abrir um conjunto de pastas de trabalho Excel muito pesadas. Eu tenho que usar c #, porque eu também preciso iniciar macros, mover algumas células ao redor e iniciar um personalizado excel-add-in minha empresa usa.

Meu programa, em seguida, sai, deixando as pastas de trabalho abertas, cada uma em uma instância do Excel separada. Eu não quero que as pastas de trabalho sejam fechadas quando o programa é encerrado.

O problema é que, quando meu programa C # sai, com o tempo, as pastas de trabalho do Excel gradualmente consomem mais memória, até consumirem 3,5 GB de memória de um original de 500 mb.

Eu costumava abrir as pastas de trabalho manualmente e as folhas nunca consumiam tanta memória. Depois que comecei a abri-los usando o C #, eles começaram a quebrar devido ao uso excessivo de memória. Minha teoria é que, de alguma forma, quando eu interajo com o objeto COM Excel, eu crio um vazamento de memória.

Abaixo está o meu código original:

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;

Eu li sobre como você precisa usar o Marshal para liberar usos, agora estou tentando o seguinte código, mas não tenho uma maneira fácil de testá-lo, além de abrir todas as planilhas e ver se elas consomem muitos dados.

            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;

questionAnswers(1)

yourAnswerToTheQuestion