已关闭的 XML。Workbook.Save() 时内存泄漏

Inf*_*eus 1 c# excel memory-leaks closedxml

我需要从 dataTable 添加新的工作表。对于这个任务,我使用 ClosedXML:

workbook.Worksheets.Add(dataTable);
workbook.Save();
workbook = new XLWorkbook(filePath); //reload file to avoid exception at next saving
Run Code Online (Sandbox Code Playgroud)

我的进程使用了​​ 128 Mb 的内存,但在Workbook.Save()此数字增加到 382 Mb 之后。添加下一个工作表后,内存使用量从 464 Mb 上升到 619 Mb。但此时的实际文件为 1.6 Mb。

这可能是什么原因?

Evk*_*Evk 5

XLWorkbook工具IDisposable,你应该叫释放其持有的任何资源。如果你不这样做 - 它们只会XLWorkbook在实例被垃圾收集时被释放(假设实现了正确的终结器),这将在未来的某个时间发生。你应该这样做:

workbook.Save();
workbook.Dispose(); // < important
workbook = new XLWorkbook(filePath);
Run Code Online (Sandbox Code Playgroud)

当然更好的是包装workbookusing语句或至少使用tryfinally确保在异常时释放,但这与问题没有直接关系。

  • 另请注意,如果您在“调试”配置中运行应用程序(通常意味着优化已关闭),则无法保证已处理的对象会在您期望的时候被实际处理。它们的对象通常被保留,以便您可以在调试器中查看它们。切换到 `Release` 配置以确保在你期望的时候垃圾回收处理的对象。 (2认同)