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 :-
|
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.
Please drop me a line if you'd like to see a comparison running the same list statement using the New Sprezzatura Viewer and OI’s standard report viewer. I can be reached through the Sprezz website's Contact Us page. Martyn.
ReplyDelete