Pergunta

tem ninguém usou o functoid cumulativo máximo e problemas de desempenho observado?

Resumo
Se alguém quiser mapear o valor máximo de um campo que você pode usar a máxima cumulativa functoid.

Problema
Depois de termos utilizados por um tempo percebemos desempenho degradado em arquivos maiores.

Examinando o xslt percebe-se que o cálculo max é feito para cada registro looping ...

Pode-se mover o cálculo para o grande pai, e apontar as novas XSLT no caminho personalizado XSL, mas eu realmente gosto de manter a possibilidade de mapear na ferramenta de mapeamento.

Todas as sugestões?

Atenciosamente
Martin Traga

http://martinbring.blogspot.com

Foi útil?

Solução

Ao remover a máxima cumulativa e adicionando 3 functoids script, fazendo o cálculo de outra maneira, o problema está resolvido. tempo Mapeamento diminuiu por um fator de 40.

11 Mb, 10 000 linhas, foi anteriormente mapeado em 200 minutos, agora é mapeado em 5 minutos.

Solução
Uma functoid script, "Molde inline XSLT chamada" com nenhuma entrada ou de saída, que contém a porção max () da biblioteca de EXSLT biblioteca de matemática encontrada aqui . Em vez de usar a biblioteca inteira eu descompactou o arquivo e "extraído" o modelo max ().

 <xsl:template name="GetMax">
   <xsl:param name="nodes" /> 

    <xsl:choose>
      <xsl:when test="not($nodes)">NaN</xsl:when> 
      <xsl:otherwise>
        <xsl:for-each select="$nodes">
          <xsl:sort data-type="number" order="descending" /> 
          <xsl:if test="position() = 1">
          <xsl:value-of select="number(.)" /> 
        </xsl:if>
       </xsl:for-each>
     </xsl:otherwise>
   </xsl:choose>
 </xsl:template>

Um script functoid, "modelo de chamada inline XSLT" sem entrada ou de saída, que contém uma variável que selecione pontos de atributos do modelo com o conjunto de nós para calcular

<xsl:variable name="var:MaxValueDate">
    <xsl:call-template name ="GetMax">
            <xsl:with-param name ="nodes" select="Root//Parent/ValueToCalculate" />
    </xsl:call-template>
</xsl:variable>  

Um functoid de script, "inline XSLT" com uma saída, usando a variável para preencher um elemento de saída com o seu valor.

<OutputElement>
        <xsl:value-of select="$var:MaxValueDate" />
</OutputElement>

Voila!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top