我想提高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的比较是表现的原因。
提前感谢您提供有价值的解决方案/解决方法。
答案 0 :(得分:2)
尝试定义密钥<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)"/>
。
答案 1 :(得分:1)
使用@MartinHonnen建议的密钥将是我的第一反应,值得尝试,但它可能没有多大帮助,因为(a)尽管Saxon-SA 9.0很久以前,我的回忆可能是我认为Saxon优化器应该自动引入密钥,并且(b)问题可能在于评估联合。
结合的结果有多少重复?如果是这样,应用distinct-values()来消除重复项可能有所帮助。
如果您想以我们可以运行的形式打包它,我们很乐意看一下。但前提是您已准备好继续使用更新的软件版本。