<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet href="../make-menu.xsl" type="text/xsl"?><html>
   <head>
      <this-is section="using-xquery" page="querycompilation" subpage=""/>
      <!--
           Generated at 2011-12-09T20:47:22.916Z--><title>Saxonica: XSLT and XQuery Processing: Compiling Queries</title>
      <meta name="coverage" content="Worldwide"/>
      <meta name="copyright" content="Copyright Saxonica Ltd"/>
      <meta name="title" content="Saxonica: XSLT and XQuery Processing: Compiling Queries"/>
      <meta name="robots" content="noindex,nofollow"/>
      <link rel="stylesheet" href="../saxondocs.css" type="text/css"/>
   </head>
   <body class="main">
      <h1>Compiling Queries</h1>
      <p>In Saxon 9.4, Saxon-EE automatically (and selectively) compiles queries to Java bytecode. When running
      on .NET, the bytecode is then automatically converted to IL code for execution. The bytecode exists only in memory,
      and would not be useful otherwise because it contains many references to the data structures generated by the Saxon
      parser and optimizer.</p>
      <p>This facility replaces the ability in previous Saxon-EE releases to generate Java source code from a query.</p>
      <p>The performance boost achieved by bytecode generation is variable; 25% is typical. The constructs that benefit the
      most are those where the expression tree contains many constructs that are relatively cheap in themselves, such as
      type conversion, comparisons, and arithmetic. This is because the saving from bytecode generation is mainly not in the
      cost of performing primitive operations, but in the cost of deciding which operations to perform: so the saving is greater
      where the number of operations is high relative to their average cost.</p>
      <p>There are configuration options to suppress bytecode generation (<code>FeatureKeys.GENERATE_BYTE_CODE</code>), to
      insert debugging logic into the generated bytecode (<code>FeatureKeys.DEBUG_BYTE_CODE</code>), and to display the generated
      bytecode (<code>FeatureKeys.DISPLAY_BYTE_CODE</code>).</p>
      <table width="100%">
         <tr>
            <td>
               <p align="right"><a class="nav" href="extensibility.xml">Next</a></p>
            </td>
         </tr>
      </table>
   </body>
</html>