有没有人使用过累积最大值 functoid 并注意到性能问题?
摘要
如果想要映射字段的最大值,可以使用 functoid 累积最大值。
问题
在我们使用它一段时间后,我们注意到较大文件的性能下降。
检查 xslt 注意到每个循环记录都进行了最大计算......
可以将计算移至祖父,并在自定义 XSL 路径中指出新的 xslt,但我真的很喜欢在映射工具中保留映射的可能性。
有什么建议么?
马丁带来的亲切问候
有没有人使用过累积最大值 functoid 并注意到性能问题?
摘要
如果想要映射字段的最大值,可以使用 functoid 累积最大值。
问题
在我们使用它一段时间后,我们注意到较大文件的性能下降。
检查 xslt 注意到每个循环记录都进行了最大计算......
可以将计算移至祖父,并在自定义 XSL 路径中指出新的 xslt,但我真的很喜欢在映射工具中保留映射的可能性。
有什么建议么?
马丁带来的亲切问候
通过去除累积最大值并添加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>
瞧!