2010-07-20 2 views
3

Я просто профилировал приложение для отчетов, когда пытался создать в четыре раза один и тот же отчет подряд. первый занял 1859 мс, тогда как следующие были заняты только между 400 и 600 мс. Каково объяснение этому? мог ли я каким-то образом использовать его для ускорения моего приложения? модуль отчетности работает на сервере и ждет, пока пользователь нажмет «распечатать отчет».ускорение jasperreports

ответ

3

Последующие прогоны отчета расширили память и заполнили различные кеши.

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

Очевидным и простым способом использования этого является запуск одного «поддельного» запроса до того, как ваши пользователи будут освобождены в системе; это означало бы, что вы втянете 1800 мс ожидания, а ваши пользователи получат сладкий 400. К сожалению, это будет работать только в том случае, если все запросы одинаковы, т. е. если каждый запрашивает один и тот же отчет. Если есть разные отчеты и разные данные, кеши будут очищены для разных данных, и для загрузки новых результатов потребуется больше времени.

Вкратце: если у вас всегда был тот же запрос, вы могли бы дать очень быстрые ответы, но тогда вы никогда не представили ничего нового.

+0

thx за советом! Я не использую db, но xml-файлы, но эффект тот же. Большая часть времени первого вызова переходит к xpath-запросу. не ожидал этого, так как выглядит так банально. – martin

+0

Анализ XML - это невероятное количество работы! Как часто этот XML изменяется? Вы можете настроить прослушиватель жизненного цикла, который анализирует XML в DOM и сохраняет его в сеансе сервлета. Тогда запросы будут запускаться XPath, но не нужно открывать или анализировать файл. Если XML иногда обновляется, вы можете написать еще один сервлет, который заставляет повторно разбор. –

+0

Прежде, чем вы меня послушаете: выполните некоторые протоколирования и выясните, какие операции всасывают время. В моих рекомендациях рассматриваются затраты на чтение файлов и разбор XML, но это время можно потратить в другом месте. –