Optimizations and performance improvements
The xsl:result-document
instruction in Saxon-EE is now asynchronous. That is, the
code to output the result document runs in a separate thread, in parallel with other
processing. The maximum number of threads used by xsl:result-document
instructions
is limited by the configuration option FeatureKeys.RESULT_DOCUMENT_THREADS
which defaults to the number of processors available to the Java VM; setting this to zero or one will
suppress multithreading. Setting FeatureKeys.ALLOW_MULTITHREADING
to false has
the same effect. (This can be useful when debugging, because otherwise the output from
xsl:message
and fn:trace()
can be very confusing).
Asynchrony can also potentially cause problems if the code calls extension functions that
have side-effects. Multi-threading can therefore be controlled, if required,
using the saxon:asynchronous
attribute on the xsl:result-document
instruction:
use saxon:asynchronous="no"
to suppress multi-threading.
Asynchronous processing of xsl:result-document
is automatically suppressed if
tracing (using a TraceListener
) is enabled.
The collection()
function is also now multi-threaded in Saxon-EE. Each document in the collection
is parsed in a separate thread, and the documents are processed in the order in which parsing completes. This
makes the order of the documents less predictable than in previous releases, though it was never guaranteed or
documented.