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
。 运行Release
configuration中的代码并在处理完XLWorkbook
之后添加以下代码:
GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect();
你应该注意到内存回落到可接受的水平。
XLWorkbook
实现了IDisposable
,您应该调用它来释放它拥有的任何资源。 如果你不这样做 – 当实例被垃圾收集时,它们将只被释放(假设XLWorkbook
实现了正确的终结器),这将在未来一段时间发生。 你应该这样做:
workbook.Save(); workbook.Dispose(); // < important workbook = new XLWorkbook(filePath);
当然更好的做法是将workbook
换成using
语句,或者至less使用try
和finally
来确保释放exception,但是这与问题没有直接关系。