您好,我有一个业务,是需要将大量的html文件合并转换成一个大的word或者pdf文档,在此过程中我发现所需内存很大,且无法预知此过程所需内存大小,请问有什么办法可以计算将大量html转换为word所需的内存大小呢?
@yyl5201314, 无法预测此过程所需的内存量,因为所有文件都不同,并且 Aspose.Words 将为不同数量的对象分配内存。
从 Aspose.Words 端,您可以通过将一些数据从内存卸载到文件系统来减少内存量:
String tempFolder = "D:\\TempFolder\\";
LoadOptions loadOptions = new LoadOptions();
loadOptions.setTempFolder(tempFolder);
Document doc = new Document("in.html", loadOptions);
PdfSaveOptions saveOptions = new PdfSaveOptions();
saveOptions.setTempFolder(loadOptions.getTempFolder());
saveOptions.setMemoryOptimization(true);
doc.save(new FileOutputStream(new File("out.pdf")), saveOptions);
请参阅我们的文档了解更多详细信息:
大家可能知道,Java中的内存管理是由Java虚拟机控制的。 使用JVM命令行选项-Xmx您可以控制堆大小的最大量。 您还可以使用 System.gc() 或 Runtime.gc() 方法手动启动垃圾收集。 而且Java提供了几种垃圾收集器,因此您可以尝试并选择适合您的一种。
好的,我想问一下可以通过源文件的大小来计算转换过程中将要使用的内存大小吗?还是无法预测的?
@yyl5201314, 是的,这是不可预测的。
请想象两个具有相同大小的 Word 文档,但第一个文档在第一页上仅包含一个图像,而第二个文档包含多个段落,每个段落一个字符。 在第一种情况下,Aspose.Words 在将文档加载到内存中时将创建较少的对象,例如,将有一个页面对象和一个包含图像的对象,但在第二种情况下,将有多个运行对象和 多个段落对象和多个页面对象。 每个对象都会为其字段占用内存。 所以在第二种情况下,会分配更多的内存。 当然,这是一个非常粗略的例子,只是为了给你一个想法。 在加载每个文件之前,如何预测每个文件所需的内存量?
HTML 文件也是如此。 文档的内部结构影响所需的内存量,而不是文件大小。