Xslt 等于性能改进
Xslt equals performance improvement
我想提高我的 xslt 2.0 的性能。我使用 saxon-sa 9.0.0.5 作为 xslt 处理器。在分析的帮助下,我找到了瓶颈。这是我提取的瓶颈代码
<xsl:variable name="party" select="/drawdownInventoryAndEventNotification/party"/>
-- 约500方
<xsl:apply-templates select="$party[@id = ($abc/@id union $xyz)]"/>
-- union 正在生成大约 20k 项的序列。将这 20k 个项目与 party@id 进行比较是性能的原因。
提前感谢您提供宝贵的解决方案/解决方法。
尝试定义一个键 <xsl:key name="party-by-id" match="/drawdownInventoryAndEventNotification/party" use="@id"/>
,然后将 <xsl:apply-templates select="$party[@id = ($abc/@id union $xyz)]"/>
替换为 <xsl:apply-templates select="key('party-by-id', $abc/@id union $xyz)"/>
。
按照@MartinHonnen 的建议使用密钥是我的第一反应,值得一试,但它可能帮不上什么忙,因为 (a) 虽然 Saxon-SA 9.0 是很久以前的事了,我的回忆可能有问题,我认为 Saxon 优化器应该自动引入密钥,并且 (b) 问题可能出在评估联合上。
并集的结果是否有很多重复?如果是这样,应用 distinct-values() 来消除重复项可能会有所帮助。
如果您想以我们可以 运行 的形式打包它,我们很乐意查看。但前提是您准备好升级到更新的软件版本。
我想提高我的 xslt 2.0 的性能。我使用 saxon-sa 9.0.0.5 作为 xslt 处理器。在分析的帮助下,我找到了瓶颈。这是我提取的瓶颈代码
<xsl:variable name="party" select="/drawdownInventoryAndEventNotification/party"/>
-- 约500方
<xsl:apply-templates select="$party[@id = ($abc/@id union $xyz)]"/>
-- union 正在生成大约 20k 项的序列。将这 20k 个项目与 party@id 进行比较是性能的原因。
提前感谢您提供宝贵的解决方案/解决方法。
尝试定义一个键 <xsl:key name="party-by-id" match="/drawdownInventoryAndEventNotification/party" use="@id"/>
,然后将 <xsl:apply-templates select="$party[@id = ($abc/@id union $xyz)]"/>
替换为 <xsl:apply-templates select="key('party-by-id', $abc/@id union $xyz)"/>
。
按照@MartinHonnen 的建议使用密钥是我的第一反应,值得一试,但它可能帮不上什么忙,因为 (a) 虽然 Saxon-SA 9.0 是很久以前的事了,我的回忆可能有问题,我认为 Saxon 优化器应该自动引入密钥,并且 (b) 问题可能出在评估联合上。
并集的结果是否有很多重复?如果是这样,应用 distinct-values() 来消除重复项可能会有所帮助。
如果您想以我们可以 运行 的形式打包它,我们很乐意查看。但前提是您准备好升级到更新的软件版本。