我需要从 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。
这可能是什么原因?
最佳答案
XLWorkbook
实现了 IDisposable
,您应该调用它来释放它持有的任何资源。如果你不这样做——它们只会在实例被垃圾回收时被释放(假设 XLWorkbook
实现了正确的终结器),这将在未来的某个时间发生。你应该这样做:
workbook.Save();
workbook.Dispose(); // < important
workbook = new XLWorkbook(filePath);
当然更好的方法是将 workbook
包装到 using
语句中,或者至少使用 try
和 finally
来确保异常释放,但这与问题没有直接关系。
关于c# - 封闭的 XML。 Workbook.Save() 时内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43180623/