#2342·excelize

在保存具有许多大型工作表 XML 部分的工作簿时,SaveAs 可能会导致堆内存使用过多

作者: 1436761858创建于 2026年6月24日更新于 2026年8月16日
标签needs more info

说明

□ 说明

我们看到,在用大模板制作的工作手册上,使用 " 拯救 " 的次数非常多。

在我们的制作工作量中,我们使用包含许多工作表的XLSX模板. 该服务打开模板,将数据输入其中,然后调用 " SaveAs " 生成最后的工作手册。

对于一些大型模板,在打开文件和写行时内存使用率相对较低,但在"拯救As"期间却急剧增加. 在一个案例中,大量使用量在节省期间上升到1.5GB左右. 这可能导致OOM在更小的生产容器中,例如2个CPU / 2个GB内存容器.

当工作手册包含许多大型工作表 XML 部件时,这个问题变得更加明显. 这些工作表 XML 文件在打开工作簿时可以被洒入临时文件,但在保存期间被装入回内存.

□ 根源

在`writeToZip'中,临时文件备份条目目前写有:

开始 如果n,错误=fi.Write(f.readBytes(path));int64(n) > 数学。 麦斯金特32 { f.zip64 条目=附件(f.zip64 条目,路径) {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

我会创建一个pr, 可以帮助检查它?

内容来源: qax-os/excelize