Interestingly, using 'cast as' on $middle to narrow it to
an integer
causes the execution time to increase by 250ms, so I've
left them all
as doubles (the positional predicate in $currentNode doesn't
appear to mind
using a double).
That makes me realise that it would actually avoid many
string->number conversions if you extracted the ranges as two
sequences of integers in global variables:
<xsl:variable name="lows" select="$ranges/*/@from/xs:integer(.)"
as="xs:integer*"/>
<xsl:variable name="highs" select="$ranges/*/@to/xs:integer(.)"
as="xs:integer*"/>
<xsl:variable name="n" select="count($lows)" as="xs:integer"/>
test="some $i in 1 to $n satisfies ($highs[$i] ge $test and
$lows[$i] le $test)"
That's much better still:
Old Way New Way
932ms 772ms
931ms 771ms
952ms 781ms
941ms 771ms
931ms 781ms
Thanks Mike, always nice to use the 'satisfies' keyword...
cheers
andrew
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--