Подтвердить что ты не робот

JasperReports fillReport слишком медленный и ресурсоемкий

Я обнаружил, что JasperReports действительно медленный при заполнении отчета из приложения Java. Программа зависает в этой строке:

print = JasperFillManager.fillReport(report, parameters, xmlDataSource);

Обычно он остается там 3 минуты, потребляя до 300 МБ ОЗУ и 50% CPU.

  • report - это скомпилированный отчет (.jasper), который использует 3 подзаголовка.
  • Источник данных - довольно большой XML файл (около 100 тыс. строк, 1,5 МБ).
  • Аппарат представляет собой двухъядерный 3Ghz с 4 ГБ оперативной памяти.

Итак, как я могу улучшить производительность заполнения отчетов?

4b9b3361

Ответ 1

Проблема

Кажется, что проблема - это механизм XPath. То есть библиотека, которая анализирует XML файл, ищущий данные.

В то время как iReport Designer использует Jaxen, JasperReport использует Xalan. Xalan действительно медленный по сравнению с Jaxen (действительно очень медленный).

Вот почему проблема возникает только при заполнении отчета из приложения Java, а не из iReports.

Решение

Ну, простое решение, просто добавьте следующую строку в ваше приложение Java, чтобы выбрать Jaxen lib вместо стандартного Xalan lib (он устарел, но он работает):

JRProperties.setProperty("net.sf.jasperreports.xpath.executer.factory",
    "net.sf.jasperreports.engine.util.xml.JaxenXPathExecuterFactory");

Забастовкa >

EDIT: эта строка была устаревшей, я нашел правильный способ установки свойств:

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

Вам также нужно добавить Jaxen.jar в свой путь сборки. Вот ссылка: https://mvnrepository.com/artifact/jaxen/jaxen


В то время как заполнение отчета занимало 3-5 минут с Xalan, теперь он завершается всего за несколько секунд с Jaxen.

Ответ был найден здесь: http://community.jaspersoft.com/questions/536842/jasperreports-too-slow
А также здесь: http://community.jaspersoft.com/wiki/xml-data-source-very-slow-parse

Ответ 2

У меня также была эта проблема, когда я экспортировал pdf, но в моем случае это казалось бесконечным циклом, потому что процессор бил 100%, когда пытался создать JasperReport.

После многих исследований я нашел эту ссылку:

http://community.jaspersoft.com/info/527078/infinite-loop-subreport-fill

Какая моя проблема была решена с установкой моих подписок isPrintWhenDetailOverflows="false".