Free Support Forum - aspose.com

Word 文件5000多页3M,基本都是文字,转pdf内存控制问题

使用aspose.word (20.6)批量转化成pdf 的时候,发现内存会突然增大,并且转化完成后并没有释放。
在论坛上看到使用优化内存方式导入word文件,这种方式并没有明显的解决
这是没有使用内存优化转化
image.png (60.6 KB)
这是使用内存优化转化:
image.png (60.6 KB)

这两张图前面内存较小时批量转了一些小文件,开始增长是开始处理5000多页的文件

最后cpu 降下来了,可是堆内存并没有下降,附件是转化的示例文件

调用代码如下

LoadOptions loadOptions = new LoadOptions();
			loadOptions.getLanguagePreferences().setDefaultEditingLanguage(EditingLanguage.CHINESE_PRC);
			com.aspose.words.Document doc = new com.aspose.words.Document(sourcePath,loadOptions); // word文档
				NodeCollection<?> comments = doc.getChildNodes(NodeType.COMMENT, true);
				comments.clear();
//			SaveOptions options = SaveOptions.createSaveOptions(com.aspose.words.SaveFormat.PDF);
			PdfSaveOptions option = new PdfSaveOptions();
			option.setMemoryOptimization(true);
//			options.setMemoryOptimization(true);
			doc.save(os, option);

epservices__ - 副本.zip (3.5 MB)

@zyuee

我们已经使用最新版本的Aspose.Words for Java 20.6测试了该方案,但没有发现共享问题。 因此,请使用Aspose.Words for Java 20.6

使用的版本是20.6,可以看看你们转化时候的内存状态图吗?

@zyuee

请注意,性能和内存使用情况全取决于生成的文档的复杂性和大小。 我们建议您在结束时增加堆大小。

如果您仍然遇到问题,请分享您的工作环境,例如 操作系统,正在使用的堆大小,Java版本…

启动参数
JVM_MAXPERMSIZE=512m
JVM_XMS=128m
JVM_XMX=4096m
JVM_MAXNEWSIZE=512m
操作系统
centos7.4
jdk 1.8.0_77

@zyuee

我们已经测试了方案,但没有遇到共享问题。 请注意,当文档关闭时,在下一个垃圾回收器周期中将从内存中清除所有DOM数据。 在关闭应用程序之前,可能不会释放内存。

而且,Aspose.Words具有一些内部静态对象,这些对象在System.gc()之后仍然有效,因为这些静态字段是GC根。

非常感谢。这个文档是不是因为页数和文字较多,产生很多的dom.导致内存增加。只能通过增加堆内存来解决这个问题吧

@zyuee

正如我在上一篇文章中分享的那样,将在下一个垃圾回收器周期中从内存中清除DOM数据。 在关闭应用程序之前,可能不会释放内存。

请注意,性能和内存使用情况全取决于生成的文档的复杂性和大小。

在内存方面,Aspose.Words没有任何限制。 如果您要将大量的Word文档加载到Aspose.Words的DOM中,则需要更多的内存。 这是因为在处理过程中,文档需要完全保存在内存中。 通常,Aspose.Words需要比原始文档大10倍的内存才能在内存中构建DOM。