我需要从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。
这可能是什么原因?
答案 0 :(得分:3)
XLWorkbook
实现IDisposable
,你应该调用它来释放它拥有的任何资源。如果你不这样做 - 它们只会在实例被垃圾收集时被释放(假设XLWorkbook
实现了正确的终结器),这将在未来的某个时间发生。你应该这样做:
workbook.Save();
workbook.Dispose(); // < important
workbook = new XLWorkbook(filePath);
当然最好将workbook
包装到using
语句中,或者至少使用try
和finally
来确保异常发布,但这与...没有直接关系问题。
答案 1 :(得分:1)
在此阶段升级到ClosedXML
的最新版本v0.87
。运行Release
配置中的代码,并在处置XLWorkbook
后添加以下代码:
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
您应该注意到内存会回落到可接受的水平。