Home page Home page Home page Home page
Pixel
Pixel Header R1 C1 Pixel
Pixel Header R2 C1 Pixel
Pixel Header R3 C1 Pixel
Pixel
By Sprezz | Tuesday, 17 July 2012 18:09 | 1 Comments
Here at Sprezz Towers excitement is rising about a forthcoming update to S/List that we think our users are going to love. With each release of OI we kept getting reports that S/List was getting slower - and our testing confirmed that this was the case.

So we did what we do best at Sprezz - attacked the problem head on with a radical rewrite of the S/List engine. So for the past year or so we've been working on a new version of SLIST_PRODUCE (the program that does the grunt work for actually creating the report) to eliminate all calls to GET and SET_PRINTER. A few thousand of lines of code later we are finally ready to go public with the results. Now the User Interface remains the same (for now ;)) but the print engine is significantly faster. Those of you with long memories may remember AREV LightSpeed? Well we wouldn't go quite so far as to call it that but we have managed to wring every drop of performance from the product. Your mileage may vary but we reckon that most reports will run several times faster. Take a look at the following figures to see what we mean!

call slist("LIST 1000 SYSREPOS APPID TYPEID CLASSID ENTITYID LANDSCAPE ID-SUPP NOT-CENTRE")
VSPRINTER2 VSPRINTER1 S/LIST EXPRESS
77.956
78.97
79.17
56.368
56.797
56.717
4.349
4.526
4.543
Average 78.699 Average 56.627 Average 4.473
call slist("LIST SYSREPOS")
VSPRINTER2 VSPRINTER1 S/LIST EXPRESS
1099.197
1096.097
1121.036
780.128
776.609
774.843
46.699
46.065
45.938
Average 1,105.443 Average 777.193 Average 46.234
For fairness we repeated the exercise with OList (Oinsight's reporting tool) and got the following results :-

call list("LIST 1000 SYSREPOS APPID TYPEID CLASSID ENTITYID LANDSCAPE ID-SUPP")

VSPRINTER2 VSPRINTER1
18.491
18.076
17.789
7.945
8.259
9.21




Average 18.119 Average 8.805



call olist("LIST SYSREPOS")

VSPRINTER2 VSPRINTER1
169.793
169.400
170.111
90.061
89.313
89.199


Average 169.768 Average 89.520


And the end result :-



If you'd like to see the new reporting engine in action and you're not on our beta program then contact Martyn at martyn at sprezzatura dot com for a WebEx session demo. If you want we'll sign an NDA then show you it working against your own data. We're sure you'll be impressed. And it goes without saying that if there are aspects of YOUR system that you'd like to see run faster we're always happy to provide consultancy!

The Technical Bits
For those of you who like to know how we do these things...

Firstly there was no magic bullet - as stated earlier this required thousands of lines of code. We started by looking at the subset of OIPI functionality that S/LIST actually uses and we downloaded the VSVIEW manual and obtained a licensed copy for our own use so we could legally use the VSVIEW OLE interface.We then removed all SET_PRINTER and GET_PRINTER calls and replaced them with direct calls to the OLE control. To squeeze out every last drop of performance we didn't create an external callable routine for this. When running a report, GET_ and SET_ printer can be called hundreds of thousands of times and we wanted to eliminate this overhead. Fianlly we removed features that OIPI adds automatically such as CSV production as S/LIST already handles this internally. 
Pixel
Pixel Footer R1 C1 Pixel
Pixel
Pixel
Pixel