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.