Тест производительности новой версии FastReport .Net 2017.1.0

14.12.2016

С выходом новой версии FastReport.Net 2017.1.0 мы получили заметное ускорение в формировании отчета, экспорте,  также сократилось потребление памяти. Эти изменения побудили меня сделать сравнительный тест «старой» и «новой» версии.

Методика тестирования

В качестве тестов будем формировать отчет и производить его экспорт в несколько форматов: PDF, XLSX, HTML с послойным методом экспорта (так как он используется в веб отчетах).

 При этом измеряется время экспорта и размер полученного файла. Сначала проведем тестирование для версии 2016.4.0, затем - для новой 2017.1.0.

Берем самый популярный шаблон отчета Master-Detail. База данных XML.

Сделал вот такое нехитрое приложение:

 

Здесь Multi page – это обычный многостраничный отчет, а Unlimited page отчет с включенным свойством UnlimitedHeight. То есть используем два почти одинаковых отчета, но в одном будет безразмерная страница. Тут нужно отметить, что размер такого отчета ограничен 100 мегабайтами. При превышении этого рубежа будут все-таки создаваться новые страницы.

Чтобы сделать безразмерный отчет, открываем его в дизайнере. В инспекторе свойств выбираем страницу отчета и устанавливаем свойство UnlimitedHeight=true, ну или UnlimitedWidth=true, если ваш отчет растет в ширину.

Для замеров воспользуемся встроенным в FastReport профайлером:

Profiler.Start(); - для запуска.

Profiler.Stop(); - остановить и отобразить результаты замеров.

Запускаю по очереди каждый экспорт и записываю результаты профайлера. К слову результаты профайлер отображает в messagebox:

 

Результаты замеров

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

 

Для того же многостраничного отчета потребление памяти тоже заметно сократилось.

 

А что же с «безразмерным» отчетом?

Здесь ситуация повторяется. Время построения упало для всех.

 

Так же и потребление памяти - сильно снизилось. Для всех, кроме PDF. Но разница минимальна.

 

Для тех, кому привычнее в табличном виде:

Замеры для версии 2016.4.0

 

Multi page

Unlimited page

Размер, Kb

Время, ms

Размер, Kb

Время, ms

Prepare

1336

875

4040

875

PDF

87396

7031

81986

7220

XLSX

23092

1547

18784

1734

HTML

7354

2897

50576

1954

Замеры для версии 2017.1.0

 

Multi page

Unlimited page

Размер, Kb

Время, ms

Размер, Kb

Время, ms

Prepare

1020

735

1088

703

PDF

85482

7167

82654

7149

XLSX

16512

1359

16228

1640

HTML

2445

2725

9180

1890

 

Как видите, в целом картина заметно улучшилась в новой версии. Но посмотрите, как уменьшилось потребление памяти для HTML отчета с безразмерной страницей! В отличие от 2016.4.0 потребление упало с 50576 до 9180Кб. Показатель улучшился более чем в 5 раз! А ведь это самые ходовые отчеты, для веба. Отлично поработали!

Что же изменилось внутри?

В версиях ниже 2016.4.4 использовался метод ExportPage. Он получал страницу целиком, чтобы затем пройтись по всем объектам и сохранить их в нужный формат.

Затем страница удалялась из памяти и бралась следующая.

Если итоговыми форматами были табличные, то все это еще и накапливались в промежуточной матрице.

Если ваш отчет был не очень большой, вы не замечали проблем.

Однако с появлением «безразмерных страниц» (UnlimitedHeight и UnlimitedWidth), появились и проблемы: потребление памяти.

Было принято решение перейти на бэндовую передачу данных в экспорт. Это резко сократило потребление памяти. Пришлось основательно потрудиться и «перепилить» ядро. Правда, еще не решен вопрос с матрицами, т.к. они занимают всего один бэнд, но при этом растут в размерах. Но это дело времени.

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

Итак, как мы убедились, работа проделана не малая и показатели заметно улучшились. Особенно это заметно для HTML экспорта, что крайне ценно для веб-отчетов.

 

20 ноября 2024

Локализация и смена языков в FastReport VCL

FastReport VCL поддерживает 40 языков для локализации интерфейса и позволяет изменять язык на лету через меню или код, без перекомпиляции.
1 ноября 2024

Новые возможности редактора отчетов FastReport VCL

Рассматриваем новые возможности редактора отчетов: выносные линии, подсветка пересекающихся объектов, обновлённые деревья отчетов и данных.
30 октября 2024

Использование стилей при создании отчетов в FastReport VCL

В статье подробно рассматривается одна из новых возможностей FastReport VCL – применение стилей и страниц стилей.