News combit Dev Blog

Unbelievable Printing Performance Boost

Posted: Friday, July 28, 2017 | 0 comment(s)
 
Continuing the journey of improving the performance, we decided to tweak a bit on the printing side as well. These optimizations help when using the same table several times with different fields. Think of a tabular report with some charts and a crosstab. Typically you have different views on your data in these objects. For these cases, the improvement is huge – I mean really huge.

When it comes to database queries, for a couple of versions List & Label already checks for the identifiers/fields that are actually used in the project and only queries and passes those. However, this information was not available table instance specific, only globally for the database table itself. A simple example: if you printed the same table twice, once using the fields "FirstName", "Name", "Address" and "City" and then a chart where you were using "Revenue" and "City", this makes five identifiers in total ("FirstName", "Name", "Address", "City", "Revenue").

Until LL23, the databinding engine will pass the full five identifiers twice to the report, once for the table and once for the chart. LL23 is now able to differ between both objects and pass just the right data. This greatly lowers the load on your database server and also saves a few gazillion API calls, depending on how large your database is. If you're writing your own data provider, you can profit from this feature with just a few changes as well.

Another giant performance boost is related to this. If using report parameters (e.g. a parameter "City") to filter the data, in LL22 the whole "broad" record would have been passed even three times. LL23 can recognize that the parameter just needs distinct values and will optimize the query on the database side already. So instead of a

SELECT FirstName, Name, Address, City, Revenue FROM Customers

and collecting the distinct cities in the print engine we'll just send a

SELECT DISTINCT City FROM Customers

which performs infinitly faster.

Seeing is believing: The animations below show a comparison between LL22 and LL23 for exactly the same report.


LL22


LL23


Related to this topic, we also dramatically improved the memory footprint of the crosstab. You'll recognize this especially when printing crosstabs that span multiple shadow pages – LL23 will require only approximately half of the memory that LL22 used.




Author: Jochen Bartlau
Head of Development List & Label

Jochen Bartlau leads the development at combit as Managing Director. He's a Microsoft .NET enthusiast driving innovation & agile project management. The mobile devices geek who used to be a physicist in his first life loves to spend his spare time with his family.


  

+1 800 256 3608 (toll-free North America only)