JasperReport - слишком много ресурсов - PullRequest
1 голос
/ 23 января 2009

Итак, проблема в том, что мы показываем созданный пользователем документ в диалоге JasperReport. Пользователь может нажать значок печати и отправить его на принтер.

Кажется, что на клиентском компьютере слишком много ресурсов на всех трех уровнях: создание отчета, отображение отчета на экране и отправка его на принтер. Одним из примеров ПК является AMD Duron 800 МГц с 256 МБ оперативной памяти, поэтому нам нужно посмотреть, сможем ли мы сделать некоторые оптимизации для лучшего взаимодействия с пользователем.

Это также требует значительных ресурсов на «обычном» компьютере с процессором 2 ГГц и 1 ГБ ОЗУ, поэтому мне нужно посмотреть, есть ли возможность настроить JasperReport, чтобы он был менее готов к использованию ресурсов.

Ответы [ 2 ]

5 голосов
/ 23 января 2009

Чрезмерное использование вложенных отчетов может увеличить потребность в ресурсах для отчета. Каждый подотчет порождает свою собственную нить во время заполнения. Также, если вы используете классы скриптлетов или вспомогательные классы, убедитесь, что все ресурсы, которые они создают, должным образом очищены. Также убедитесь, что вы используете последнюю версию JR.

Одна нота. JR API включает в себя набор виртуализаторов. Когда отчет заполняется, весь заполненный отчет создается как объект (JasperPrint). В зависимости от количества страниц в отчете этот объект может быть довольно большим. Виртуализаторы можно настроить для записи в файловую систему при достижении заданного порогового значения страницы.

Обычно это уменьшает общее использование памяти, но увеличивает время заполнения. Составной частью может быть виртуализатор gzip, который вместо записи в файловую систему сжимает сгенерированные объекты с помощью gzip.

Вот FAQ по теме: http://community.jaspersoft.com/wiki/support-large-reports

Пример, на который он ссылается, можно получить, загрузив исходный код JR.

http://sourceforge.net/project/showfiles.php?group_id=36382&package_id=28579

Из высокоуровневого представления, если вы запускаете этот отчет в приложении, вы можете создать экземпляр виртуализатора (вот интерфейс, в котором перечислены известные классы реализации): http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JRVirtualizer.html

Тогда ссылка используется во время заполнения:

        JRDataSource ds = new JREmptyDataSource(10);
        JRFileVirtualizer virtualizer = new JRFileVirtualizer(2, "tmp");
        JasperPrint jasperPrint = fillReport(fileName, ds, virtualizer);

Если вы находитесь в iReport, виртуализатор можно настроить в меню «Параметры» -> «Настройки».

Надеюсь, это полезно.

Люк

1 голос
/ 23 января 2009

Ну, Jasper Reports - просто баночка, поэтому вам нужно быть более конкретным: вы запускаете JasperReports в веб-приложении (на Tomcat, Glassfish, JBoss и т. Д.) Или в iReport?

Если вы запускаете его на сервере приложений, наиболее очевидная вещь, о которой я могу подумать, - убедиться, что вы используете правильный компилятор отчетов, а именно JDT-компилятор. Обязательно убедитесь, что вы не используете компилятор BeanShell. Это медленно, как ад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...