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.


  

RSS
combit Development BlogRSS
What’s this blog for?
A place to share updates about the ongoing development of our products. General musings on the software industry included.
Archive
January 2021 (1)
December 2020 (2)
November 2020 (1)
October 2020 (2)
September 2020 (1)
August 2020 (2)
July 2020 (1)
June 2020 (1)
May 2020 (2)
April 2020 (2)
March 2020 (2)
February 2020 (1)
January 2020 (1)
December 2019 (1)
November 2019 (2)
October 2019 (2)
September 2019 (2)
August 2019 (2)
July 2019 (2)
June 2019 (2)
May 2019 (1)
April 2019 (0)
April 2019 (1)
March 2019 (1)
February 2019 (1)
January 2019 (1)
December 2018 (1)
November 2018 (2)
October 2018 (4)
September 2018 (4)
August 2018 (2)
July 2018 (2)
June 2018 (2)
May 2018 (1)
April 2018 (1)
March 2018 (1)
February 2018 (2)
January 2018 (1)
December 2017 (1)
November 2017 (2)
October 2017 (3)
September 2017 (3)
August 2017 (2)
July 2017 (2)
June 2017 (1)
May 2017 (2)
April 2017 (1)
March 2017 (1)
February 2017 (1)
January 2017 (2)
December 2016 (1)
November 2016 (1)
October 2016 (4)
September 2016 (5)
August 2016 (2)
July 2016 (2)
June 2016 (3)
May 2016 (2)
April 2016 (3)
March 2016 (3)
February 2016 (1)
January 2016 (2)
December 2015 (2)
November 2015 (1)
October 2015 (4)
September 2015 (5)
August 2015 (2)
July 2015 (2)
June 2015 (2)
May 2015 (1)
April 2015 (2)
March 2015 (1)
February 2015 (1)
January 2015 (1)
December 2014 (2)
November 2014 (1)
October 2014 (1)
September 2014 (2)
August 2014 (1)
July 2014 (2)
June 2014 (1)
May 2014 (2)
April 2014 (1)
March 2014 (2)
+1 800 256 3608 (toll-free North America only)