Inf*_*eus 1 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
Run Code Online (Sandbox Code Playgroud)
我的进程使用了 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);
Run Code Online (Sandbox Code Playgroud)
当然更好的是包装workbook成using语句或至少使用try并finally确保在异常时释放,但这与问题没有直接关系。