这个问题已经被问过并得到了很多回答,例如:
为了确保我的托管应用程序不会耗尽内存,我需要调用System.Runtime.InteropServices.Marshal.FinalReleaseComObject(managedExcelObject)吗?请注意,除非您已经阅读并理解了Hans Passent的答案,否则请勿回答此问题。
为什么Microsoft.Office.Interop.Excel.Application.Quit()会使后台进程继续运行?
但是,Hans Passent对以下问题的回答让我相信它们已经过时和/或不正确:使用IDisposable清理Excel Interop对象
所以,我的问题是: 我如何清理Excel互操作对象,以便在内存压力触发垃圾回收时释放所有托管和非托管的Excel资源?
- 在发布模式下?
- 在调试模式下(如果我们关心的话)?
在发布模式下:
仅让所有托管的Excel互操作对象超出范围是否足够?
我需要调用excelApp.Quit()吗?
非托管堆上的内存压力是否会触发垃圾回收?即我是否还需要调用:
GC.Collect();
GC.WaitForPendingFinalizers();
为了确保我的托管应用程序不会耗尽内存,我需要调用System.Runtime.InteropServices.Marshal.FinalReleaseComObject(managedExcelObject)吗?请注意,除非您已经阅读并理解了Hans Passent的答案,否则请勿回答此问题。
xlsx
文件。 - Panagiotis KanavosExcelDataReader
也是一个值得考虑的选择。 - Parrish Husband