Aspose.word 内存泄漏,依然存在WORDSJAVA-3167问题

大量输出文档,内容中有不同的SVG,SVG中有@font-face属性,内存一直升高直到溢出。
Aspose.Words 26.5版本依然存在WORDSJAVA-3167问题。
请尽快修复,已经严重影响用户正常使用!

@dhzhao2016 请您附上问题文档,并提供一段简单的代码,以便我们重现该问题?

html svg code.zip (36.1 KB)

请查看附件,html中带svg的内容,code是代码。像这种svg内容,大量写入文档时,或者循环多次,写入不同的文档时,内存溢出。测试输出1000个及以上文档时内存升高明显。

@dhzhao2016 我尝试在循环中生成相同的文档,但没有发现内存问题。您是否多次将相同的 HTML 代码插入到同一个文档中?如果是这样,文档大小预计会不断增加,因此文档 DOM 所需的内存也会相应增加。能否请您提供一些代码,以便我们能够重现内存不足的问题?

没有多次将相同的HTML代码插入到同一个文档。代码也没有什么特殊的操作,你就循环输出文档测试就能验证出来。
上面附件中的svg,都是各个试题的内容。我们的场景是学生考试后会将所有学生的试题输出到word或者pdf,比如有2000个学生,那么就是这么多的试题,分别输出到2000个文档中,在生产环境,大概输出600–800份时,内存就快达到10G了。

经AI分析,可能的原因有:

原因1:Aspose.Words 全局字体缓存(最可能,占80%以上)
现象 :带公式的答卷容易OOM,纯文本没问题 → 公式SVG中嵌入了字体数据!
原理 :

  1. 公式SVG中通常嵌入了 @font-face + base64编码的字体数据(stix、math1等20多种字体)
  2. 每次调用 builder.insertHtml(svg) 时,Aspose.Words会把这些字体加载到**全局静态字体缓存中
  3. Document.clearCaches() 只能清理Document级别的缓存,**清理不了全局静态的字体缓存
  4. 500份答卷 × 每份上百个公式 × 每个公式20多种字体 → 字体缓存无限增长

原因2:SVG转换后的Shape对象缓存未完全释放

  1. SVG被Aspose渲染为Shape对象后,内部可能有静态缓存
  2. Document.clearCaches() 可能不彻底

@dhzhao2016 感谢您提供的更多信息。我们在两台不同的机器上测试了该场景,仍然无法重现内存异常的输出。我们观察到,文档生成后内存已正确释放,内存使用情况稳定,没有增长。我们也检查了字体资源的处理方式,没有发现任何内存问题。