ClosedXML。 内存泄漏,而Workbook.Save()

我需要从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。

这可能是什么原因?

在此阶段升级到最新版本的ClosedXML v0.87 。 运行Releaseconfiguration中的代码并在处理完XLWorkbook之后添加以下代码:

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

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

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

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

当然更好的做法是将workbook换成using语句,或者至less使用tryfinally来确保释放exception,但是这与问题没有直接关系。