有人使用过累积最大 functoid 并注意到性能问题吗?

抽象的
如果想要映射某个字段的最大值,可以使用 functoid 累积最大值。

问题
使用一段时间后,我们注意到较大文件的性能下降。

检查 xslt 会发现,最大计算是针对每个循环记录进行的...

人们可以将计算移至祖父级,并在自定义 XSL 路径中指出新的 xslt,但我真的很喜欢保留在映射工具中进行映射的可能性。

有什么建议么?

亲切的问候
马丁·布林

http://martinbring.blogspot.com

有帮助吗?

解决方案

通过删除累积最大值并添加 3 个脚本 functoid,以另一种方式进行计算,问题得到解决。 映射时间减少了 40 倍。

11 Mb、10 000 行,以前需要 200 分钟才能映射,现在只需 5 分钟即可映射。

解决方案
一种脚本 functoid,“内联 XSLT 调用模板”,没有输入或输出,包含 EXSLT 库的 max() 部分 数学库在这里找到. 。我没有使用整个库,而是解压缩文件并“提取” 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