誰かが改善/推奨事項を見つけることができれば、このXSLTを少し最適化しようとしていますか?
この種の形式に従う 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>
for-each を最適化する方法はありますか? また、それはどのように役立ちますか? アクティブなクラブの数が増えるにつれて、CPU がゆっくりと噛まれていくのを見ているので、これが部分的な原因であると思いますか?
編集:
予想される出力は変数 ClubId で、初回は 1234、2 回目は 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# コードはそれらを DB に書き込み、成功のコードを返します。これは環境を通じて他の場所に渡されます。私が言うように、それは期待どおりに機能しますが、アクティブなクラブの数を増やすと、パフォーマンスが大幅に低下することがわかります.