Programing/C#
C# Excel 프로세스 해제
꿀주세요
2022. 3. 12. 13:32
COM 객체와 닷넷의 가바지 컬렉션이 궁합이 맞지않아 프로세스가 종료되지 않는 현상이 자주 발생한다.
엑셀COM 프로세스가 종료되려면 Application, WorkBook, WorkSheet 등이 해제(release)되어야된다.
Microsoft.Office.Interop.Excel.Workbook pWorkbook = null; Microsoft.Office.Interop.Excel.Sheets pWorkSheets = null; Microsoft.Office.Interop.Excel.Worksheet pWorkSheet = null; m_ExcelApp = new Microsoft.Office.Interop.Excel.ApplicationClass(); // 엑셀 내용 Start º º º º º // 엑셀 내용 End pWorkbook.Save(); releaseObject(m_ExcelApp); releaseObject(pWorkSheet); releaseObject(pWorkSheets); releaseObject(pWorkbook); System.GC.Collect(); System.GC.WaitForPendingFinalizers(); private static void releaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch (Exception e) { obj = null; } finally { GC.Collect(); } } |
만약 Release 했는데도 EXCEL.EXE가 프로세스에 남아있다면 PID를 찾아 프로세스를 kill해주면 된다.
다음글에 작성...