【发布时间】:2012-02-22 17:00:37
【问题描述】:
我的项目有一个报告模块,它以 XML 的形式从数据库收集数据并在其上运行 XSLT 以生成用户所需的报告格式。此时的选项是 HTML 和 CSV。
我们使用 Java 和 Xalan 与数据进行所有交互。
不好的部分是用户可以请求的这些报告之一是 143MB(大约 430,000 条记录),仅用于 XML 部分。当它被转换成 HTML 时,我用完了堆空间,最多为堆保留 4096G。这是不可接受的。
似乎问题只是数据太多,但我不禁想到有一个更好的方法来处理这个问题,而不是限制客户并且无法满足功能需求。
我很高兴根据需要提供更多信息,但我不能透露太多有关该项目的信息,因为我相信你们中的大多数人都理解。此外,答案是肯定的;我同时需要所有数据:我无法对其进行分页。
谢谢
编辑
我使用的所有转换类都在 javax.xml.transform 包中。实现如下所示:
final Transformer transformer =
TransformerFactory.newInstance().newTransformer(
new StreamSource(new StringReader(xsl)));
final StringWriter outWriter = new StringWriter();
transformer.transform(
new StreamSource(new StringReader(xml)), new StreamResult(outWriter));
return outWriter.toString();
如果可能的话,我想保留 XSLT 的原样。 StreamSource 的处理方法应该允许我在处理一些数据时对其进行 GC,但我不确定 XSLT(函数等)的哪些限制可能需要它进行适当的清理。如果有人可以向我指出详细说明这些限制的资源,那将非常有帮助。
【问题讨论】:
标签: java xslt heap-memory xalan