c# - 封闭的 XML。 Workbook.Save() 时内存泄漏

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

这可能是什么原因?

最佳答案

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

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

当然更好的方法是将 workbook 包装到 using 语句中,或者至少使用 tryfinally 来确保异常释放,但这与问题没有直接关系。

关于c# - 封闭的 XML。 Workbook.Save() 时内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43180623/

相关文章:

c# - SQL Server DTS Connection2 对象有一个未记录的属性 UseDSL。它有什么作用?

excel - 在 +/- 按键上增加/减少 ActiveCell 的值

php - 使用 PHP 读取 XLS 文件时的字符编码问题

javascript - 每个 addEventListener 是否都需要一个 removeEventListener 来防止 Appcelerator 中的内存泄漏

Textview 上的 Android 内存泄漏 - LeakCanary(泄漏可以忽略)

c# - ACR1252 NFC读写器序列号

c# - 加入线程时是否需要内存屏障?

c++ - UIAutomation FindAll 泄漏内存

c# - 了解 Ninject 的好处

python - 如何使用 Python Pandas 将 CSV 文件写入 XLSX?