如果有人可以發現任何改進/建議,我正在尋找優化這個XSLT的方法嗎?我的XSLT1的性能優化
我收到沿着這種格式的下面的XML文件:
<TransfersToComplete>
<TransfersForFees>
<Transfer>
<PlayerID>1234</PlayerID>
<ClubJoiningID>4444</ClubJoiningID>
<FeeInPounds>1200000</FeeInPounds>
</Transfer>
<Transfer>
<PlayerID>3835</PlayerID>
<ClubJoiningID>4444</ClubJoiningID>
<FeeInPounds>5000000</FeeInPounds>
</Transfer>
<Transfer>
<PlayerID>17118</PlayerID>
<ClubJoiningID>5229</ClubJoiningID>
<FeeInPounds>18000000</FeeInPounds>
</Transfer>
</TransfersForFees>
<FreeAgencyTransfers>
<FreeTransfer>
<PlayerID>42323</PlayerID>
<ClubJoiningID>332</ClubJoiningID>
</FreeTransfer>
</FreeAgencyTransfers>
</TransfersToComplete>
我也有一個包含「主動」俱樂部的名單另一個XML文件(即那些由玩家而不是AI控制)
<ActiveClubs>
<Club><ClubID>1234</ClubID></Club>
<Club><ClubID>4482</ClubID></Club>
</ActiveClubs>
我在一個雙輸入地圖作爲BizTalk解決方案的一部分加入了這些,所以在輸入文檔看起來是這樣的:
<Root>
<InputMessage0>
<ActiveClubs>
<Club>
<ClubID>1234</ClubID>
</Club>
<Club>
<ClubID>4482</ClubID>
</Club>
</ActiveClubs>
</InputMessage0>
<InputMessage1>
<TransfersToComplete>
<TransfersForFees>
<Transfer>
<PlayerID>1234</PlayerID>
<ClubJoiningID>4444</ClubJoiningID>
<FeeInPounds>1200000</FeeInPounds>
</Transfer>
<Transfer>
<PlayerID>3835</PlayerID>
<ClubJoiningID>4444</ClubJoiningID>
<FeeInPounds>5000000</FeeInPounds>
</Transfer>
<Transfer>
<PlayerID>17118</PlayerID>
<ClubJoiningID>5229</ClubJoiningID>
<FeeInPounds>18000000</FeeInPounds>
</Transfer>
</TransfersForFees>
<FreeAgencyTransfers>
<FreeTransfer>
<PlayerID>42323</PlayerID>
<ClubJoiningID>332</ClubJoiningID>
</FreeTransfer>
</FreeAgencyTransfers>
</TransfersToComplete>
</InputMessage1>
</Root>
我不希望在遊戲中看到每次傳輸的全部運作每一個球員,所以我限制在只屬於自己的俱樂部,我的XSLT如下:
<xsl:for-each select="/*[1]/ActiveClubs/Club">
<xsl:variable name ="clubId" select="current()/ClubID/text()"/>
<...CallTemplate...>
</xsl:for-each>
有沒有一種方法我可以優化爲每個,它是如何幫助?隨着活躍俱樂部數量的增長,我看到我的CPU慢慢變得咀嚼,所以我認爲這是一個部分原因?
編輯:
期望輸出將是可變ClubId第一次四周以1234,第二時間4482
在我的例子上述(2個活性俱樂部)我看到很少/沒有性能下降 - 其當我到40及以後...
在顯示XSLT的其他方面 - 這是它調用模板:
<xsl:call-template name="DoPaidTransfers">
<xsl:with-param name="var:ClubId" select="$clubId"/>
</xsl:call-template>
那就是:
<xsl:template name="DoPaidTransfers">
<xsl:param name="var:ClubId"/>
<responseCode><xsl:value-of select="CSharpCodeCall:DoPaidTransfers($clubId)"/></responseCode>
</xsl:template>
我的C#代碼將它們寫入數據庫,返回成功的代碼,並通過環境在其他地方傳遞。
正如我所說,它按預期工作,但當看到活躍俱樂部的數量增加時,我發現顯着的性能損失。
我想你可以在這裏使用** xsl:key **。您能否在這種情況下展示完整的XSLT和您的預期輸出,因爲這將有助於我們充分理解和分析這種情況。謝謝! –
@TimC - 爲你做到了 - 我能展示的任何其他幫助? – Chris
嗯..我不確定這個問題是在XSLT這裏。如果爲每個俱樂部調用數據庫,則需要確保數據庫過程儘可能優化。是否有可能只調用一次數據庫,但一次傳入所有活動的俱樂部(例如,作爲逗號分隔的列表?) –