ClosedXML。 Workbook.Save()时内存泄漏

时间:2017-04-03 09:08:48

标签: 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

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

这可能是什么原因?

2 个答案:

答案 0 :(得分:3)

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

workbook.Save();
workbook.Dispose(); // < important
workbook = new XLWorkbook(filePath);

当然最好将workbook包装到using语句中,或者至少使用tryfinally来确保异常发布,但这与...没有直接关系问题。

答案 1 :(得分:1)

在此阶段升级到ClosedXML的最新版本v0.87。运行Release配置中的代码,并在处置XLWorkbook后添加以下代码:

GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();

您应该注意到内存会回落到可接受的水平。