La automatización de C # Excel provoca una pérdida de memoria de Excel

Estoy tratando de usar C # con la biblioteca COM Interop para abrir un conjunto de libros de trabajo de Excel muy pesados. Tengo que usar C #, porque también necesito iniciar macros, mover algunas celdas y comenzar a utilizar un complemento de Excel personalizado que mi empresa usa.

Mi programa luego sale, dejando los libros abiertos, cada uno en una instancia de Excel por separado. NO QUIERO que los libros se cierren cuando el programa salga.

El problema es que cuando mi programa C # sale, con el tiempo, los libros de Excel consumen gradualmente más memoria, hasta que consumen 3.5 gigas de memoria de un original de 500 mb.

Solía ​​abrir los libros de trabajo a mano, y las hojas nunca consumían tanta memoria. Una vez que comencé a abrirlos con C #, comenzaron a romperse debido al uso extremo de la memoria. Mi teoría es que de alguna manera, cuando interactúo con el objeto COM Excel, creo una pérdida de memoria.

A continuación se muestra mi 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;

Leí sobre cómo necesita usar Marshal para liberar usos, por lo que ahora estoy probando el siguiente código, pero no tengo una forma fácil de probarlo, aparte de abrir todas las hojas y ver si consumen demasiada información.

            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;

Respuestas a la pregunta(1)

Su respuesta a la pregunta