On 02/02/2013 22:56, Michael Kay wrote:
I'll have a play with the example and see if I can add any
First experiment: see what the impact of bytecode generation is.
Answer: it brings the runtime down from 19.8s to 17.2, perhaps 15%.
That's not untypical, but sometimes with stylesheets dominated by
computation the effect is much greater; it suggests the time is
dominated by something where bytecode generation has relatively
Next experiment: switch on Java profiling. This shows the
performance dominated by two things: ArrayIterator processing, which
is presumably the repeated iteration over the elements in the data
file, and string-to-double conversion.
Next experiment: run with -TP:profile.html. Unfortunately this
causes the transformation to fail with a stack overflow. I think
that tail-recursion is being suppressed because it makes it
impossible to get a useful execution profile.
Another way of saving the repeated string-to-double conversion cost
might be to use a memo function: extract the double value of each
attribute of the data file using a function declared with
Using tunnel parameters isn't going to help performance. The cost of
passing the parameter is negligible; it's the cost of repetitive
processing of the data that's the concern. Try passing 5 parameters,
each a sequence of xs:double values, rather than a sequence of
elements containing these five numbers as attributes.