With the release of the new version FastReport.Net 2017.1.0 we got a significant acceleration of report building, exporting, and reduced memory consumption. These changes have prompted me to make a comparison test of the "old" and the "new" versions.
Testing technique
For testing we will build a report and make its export to multiple formats: PDF, XLSX, HTML export with layer method (because it is used in web reports).
At the same time, exports time will be measured as well as the size of the file. First let’s test the version 2016.4.0, then - the new 2017.1.0.
Let’s take the most popular template Master-Detail Report. XML data base.
I've done simple enough application:
Here a Multi page is a usual multipage report, and Unlimited page is a report with enabled property UnlimitedHeight. This wat we use two almost identical report, but one of them will have a unlimited page. Here I must point out that the size of this report is limited to 100 MB. Exceeding this limit will still create new pages.
To make the unlimited report, open it in the designer. In the Property inspector, select the page of the report and set UnlimitedHeight property = true, or UnlimitedWidth = true if your report grows in width.
For the measurements we use the built-in FastReport profiler:
Profiler.Start(); - to start;
Profiler.Stop(); - to stop and show result.
I'm starting each export in turns and recording the results of profiling. By the way, profiler displays the results in a MessageBox:
Measurement results
For a typical multipage report time of building mostly got reduced. However, not for all reports: when exporting to PDF format time of building increased slightly. Apparently not all optimization has been completed.
For the same multipage report memory consumption is reduced considerably.
And what about the "unlimited" report?
Here’s the same thing. Time of construction reduced for each dimension.
As well as memory consumption – it has strongly reduced. For each dimension, except PDF. But the difference is minimal.
For those who prefer in tabular form:
Measurements version 2016.4.0
|
Multi page |
Unlimited page |
||
Размер, Kb |
Время, ms |
Размер, Kb |
Время, ms |
|
Prepare |
1336 |
875 |
4040 |
875 |
|
87396 |
7031 |
81986 |
7220 |
XLSX |
23092 |
1547 |
18784 |
1734 |
HTML |
7354 |
2897 |
50576 |
1954 |
Measurements version 2017.1.0
|
Multi page |
Unlimited page |
||
Размер, Kb |
Время, ms |
Размер, Kb |
Время, ms |
|
Prepare |
1020 |
735 |
1088 |
703 |
|
85482 |
7167 |
82654 |
7149 |
XLSX |
16512 |
1359 |
16228 |
1640 |
HTML |
2445 |
2725 |
9180 |
1890 |
As you can see, the overall picture is significantly improved in the new version. See how memory consumption decreased for the HTML report with dimensionless page. Unlike 2016.4.0 memory consumption has decreased from 50576 to 9180Kb. Value has improved by more than 5 times! But this is the most used reports, for the web. Excellent job!
What has changed inside?
In versions below 2016.4.4 used ExportPage method. It received the entire page to move then through all the objects and save them in the desired format.
Then the page was removed from memory and next one was taken.
If the totals were tabular formats, all of it accumulated in the intermediate matrix.
If your report was not very big, you do not notice the problems.
However, with the advent of "unlimited page" (UnlimitedHeight and UnlimitedWidth), there were problems - memory consumption.
It was decided to move to Band's data transfer to export. This has greatly reduced memory consumption. FastReport team thoroughly worked and reworked the core of generator. However, the issue with the matrices is still not resolved because they occupy only one band, but grow in size. But it's just a matter of time.
In tests, we found that memory consumption for the unlimited pages noticeably reduced. But the time of construction in some cases slightly increased. However, not much.
So, as we have seen, much work has been done and performance improved significantly. This is especially noticeable for HTML export, which is extremely valuable for Web-based reporting.