簡體   English   中英

JasperReports:fillReport非常慢

[英]JasperReports: fillReport very slow

我們有這段代碼可以根據XML輸入生成PDF報告。 這非常慢(在Solaris T5220上,處理280K行需要2個小時; 70K行需要10分鍾)。

DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
FileInputStream fileStream = new FileInputStream(rawXmlFile);
ds = docBuilder.parse(fileStream);

Map<String, Object> params = new HashMap<String, Object>();
params.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT, ds);
params.put(JRXPathQueryExecuterFactory.XML_DATE_PATTERN, com.vodafone.gdsp.reporting.enums.xml.DateFormat.DATE_FORMAT_ISO8601);
params.put(JRXPathQueryExecuterFactory.XML_NUMBER_PATTERN, "##0.##");
params.put(JRXPathQueryExecuterFactory.XML_LOCALE, Locale.ENGLISH);
params.put(JRParameter.REPORT_LOCALE, Locale.UK);
params.put("REPORT_DIR", jasperFile.substring(0, jasperFile.lastIndexOf("/")));

try {
    virtPageSize = Integer.parseInt(reportConfig.getJasperVirtPageSize());
    virtPageDir = reportConfig.getJasperVirtPageDir();
} catch (NullPointerException npe) {
    logger.info("Virtual page size and directory not assigned, using the default value of virtPageSize {} and virtPageDir {}", virtPageSize, virtPageDir);
} catch (Exception ex) {
    logger.error("Exception while fetching virtual page size and directory {}", ex.getMessage());
}
logger.info("Using Jasper virtual parameters ({}, {})", virtPageSize, virtPageDir);

JRFileVirtualizer virtualizer = new JRFileVirtualizer(virtPageSize, virtPageDir);
JRVirtualizationHelper.setThreadVirtualizer(virtualizer);
params.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);

DefaultJasperReportsContext context = DefaultJasperReportsContext.getInstance();
JRPropertiesUtil.getInstance(context).setProperty("net.sf.jasperreports.xpath.executer.factory",
    "net.sf.jasperreports.engine.util.xml.JaxenXPathExecuterFactory");

File jasperReport = new File(jasperFile);
JasperPrint jasperPrint = JasperFillManager.fillReport(new FileInputStream(jasperReport), params);

正如您所看到的,此DOES包括“ use Jaxen”屬性-但是使用Jaxen和不使用Jaxen的性能沒有發現差異。 因此,我們擁有的“使用Jaxen”配置不正確,或者存在其他問題。

有人遇到過並解決了嗎? 有人對如何確定問題有任何建議嗎? -我已經打開了日志記錄,但是日志記錄不是很詳細,除非涉及到逐行詳細記錄日志的內容-沒有任何內容說“我已經看過'use Jaxen'指令並將使用Jaxen”或遵循這些原則的任何事情。

非常感謝!

更新:當我在筆記本電腦(Windows 7系統)上運行此程序時,280K報告將在16分鍾內運行; 當我在筆記本電腦上使用Xalan而不是Jaxen運行相同的報告時,我是從08:00開始的,現在是15:00,但尚未完成; 因此Jaxen庫是我所需要的。

我不明白的是,為什么在T5220的Solaris 10上運行時絕對沒有區別。 我將深入研究RAM等-可能存在資源限制。 如果有人遇到此問題,我仍將不勝感激。

我有同樣的問題。 一個330ko(2k行)的xml,需要9 800ms,如果我使用Jaxen,則需要41000 ms。 所以我想知道當前版本的JR 5.6.1是否已經解決了這個問題。 但是如果我以11 114ko(65536行)運行q xml,則需要1.7小時! DOM運行太慢並且占用大量內存。 因此,我認為可能應該將其更改為另一種解析方法。 SAX: http//blog.synyx.de/2012/08/big-jasper-reports-with-custom-xml-datasource/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM