문제

누적 최대 functoid를 사용하고 성능 문제를 발견 한 사람이 있습니까?

추상적인
필드의 최대 값을 매핑하려면 functoid 누적 최대 값을 사용할 수 있습니다.

문제
우리가 한동안 그것을 사용한 후 우리는 더 큰 파일에서 성능이 저하되는 것을 발견했습니다.

XSLT를 검사하면 각 루핑 레코드에 대해 최대 계산이 이루어 졌음을 알 수 있습니다 ...

계산을 웅장한 부모에게 옮기고 사용자 정의 XSL 경로에서 새로운 XSLT를 지적 할 수 있지만 매핑 도구에 매핑 할 가능성을 유지하고 싶습니다.

제안이 있습니까?

친절한 안부
마틴을 가져옵니다

http://martinbring.blogspot.com

도움이 되었습니까?

해결책

누적 최대 값을 제거하고 3 개의 스크립팅 틀림이 추가되어 다른 방식으로 계산을 수행하면 문제가 해결됩니다. 매핑 시간은 40 배 감소했습니다.

11MB, 10,000 행, 200 분 만에 맵핑 된 것은 이제 5 분 안에 매핑되었습니다.

해결책
하나의 스크립팅 funcToid, "인라인 XSLT 통화 템플릿", 입력 또는 출력이없는 Exslt의 라이브러리의 최대 () 부분이 포함되어 있습니다. 수학 도서관이 여기에 있습니다. 전체 라이브러리를 사용하는 대신 파일을 풀고 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>

하나의 스크립팅 funcToid, 입력 또는 출력이없는 "인라인 XSLT 호출 템플릿", 템플릿에서 속성을 선택하여 계산할 노드가 설정된 변수를 포함하는 변수가 포함되어 있습니다.

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

하나의 스크립팅 functoid, "인라인 xslt"는 하나의 출력을 사용하여 변수를 사용하여 출력 요소를 값으로 채 웁니다.

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

짜잔!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top