有没有人使用累积最大值functoid并注意到性能问题?
抽象
如果想要映射字段的最大值,可以使用functoid Cumulative Maximum。
问题
在我们使用它一段时间后,我们注意到较大文件的性能下降。
检查xslt注意到每个循环记录都进行了最大计算...
可以将计算移动到祖父,并在自定义XSL路径中指出新的xslt,但我真的希望能够在映射工具中进行映射。
有什么建议吗?
亲切的问候 马丁带来
答案 0 :(得分:3)
通过删除累积最大值并添加3个脚本functoid,以另一种方式进行计算,问题得以解决。 映射时间减少了40倍。
先前在200分钟内映射的11 Mb,10 000行现在在5分钟内映射。 <强>解决方案强>
一个脚本functoid,“内联XSLT调用模板”,没有输入或输出,包含来自EXSLT Math library found here的库的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>
瞧!