資訊: 效能的.NET Framework 中的 XSLT 轉換

文章翻譯 文章翻譯
文章編號: 325689 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文包含有關的原因和解決方案或當您使用.NET Framework XSLT 處理器來執行 XSLT,您可能會遇到的已知的效能問題的因應措施的資訊轉換。

XSLT 轉換 XmlDataDocument 與執行速度變慢

套用 XSLT 轉換 XML 表示的 ADO.NET 資料集 的資料是常見的應用程式需求。Microsoft.NET Framework 在.NET 應用程式中實作這項需求,System.Xml 命名空間中的基底類別與 ADO.NET 資料集 搭配使用。

System.Xml.Xsl.XslTransform 是基底的.NET Framework 類別用來執行 XSLT 轉換。System.Xml.XmlDataDocument]、 [System.Xml.XmlDocument,] 和 [System.Xml.XPath.XPathDocument 是三個基底.NET Framework 類別,可用來載入和執行 XSLT 轉換時,提供做為來源 XML 中 ADO.NET 資料集 的資料 XML 表示。這三個選項使用 XmlDataDocument 物件需要最少的程式碼因為它可以直接與同步 DataSet 物件時它會執行個體化。不過,效能變慢是常見的問題,當您使用 XmlDataDocument 物件來將 XSLT 轉換套用至 XML 表示的 ADO.NET 資料集。這是原本設計在 RTM 版的 [.NET Framework。

System.Xml.XPath.XPathDocument 是 XPath 和 XSLT 處理最最佳化的類別。載入 資料集 資料 XPathDocument 物件中的 XML 表示,並提供 XPathDocument 物件做為來源 XML,當您執行 XSLT 轉換以取得最大效能。 如需有關這個問題的詳細資訊及示範如何實作所述的解決方法的程式碼範例,按一下 [下面的文章編號,,檢視 「 Microsoft 知識庫 」 中的發行項]:
318580PRB: 與 XmlDataDocument XSL 轉換可能會執行速度比 XPathDocument 慢

轉換以非巢狀 DataRelation 物件的資料集效能變慢

效能變慢是當您嘗試轉換有多個 資料集 XML 表示常見的問題與相關 DataTable 物件和其 DataRelation 物件有不被巢以反映階層式結構來描繪在序列化 XML 中的關係。

當您嘗試轉換成不同的階層式格式這類 XML 資料 (例如 HTML 表格會顯示在父子式階層中資料,) 必須使用 XPath 位置路徑座標軸,例如 下列同層級之前同層級,會減慢轉換處理,當您有中型至大型磁碟區的資料。

在這種情況下 Microsoft 建議您將巢狀化 DataRelation 物件的 資料集 (也就的 DataRelation 的 [Nested] 屬性設定為 True),並在 XSLT 樣式表,用來找出並轉換資料的自然由上而下階層式的 XPath 查詢運算式中撰寫程式碼。如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
325693PRB: 效能變慢時轉換以非巢狀 DataRelations 的 ADO.NET 資料集

CPU 使用率達 100%或使用 XmlDocument 執行使用前面同層級的 XSLT 轉換的擱置

其中使用 XmlDocument 物件提供來源 XML 使用 前面同層級 XPath 位置軸的 XSLT 轉換會導致 CPU 使用率達 100%,可以使電腦停止回應 (擱置),也會造成陡峭拖放在系統效能。

當您轉換中型到大型 XML 文件或資料流時,這個行為十分明顯。這是目前在 RTM 版本的.NET Framework 中已知的問題。Microsoft 致力於防止 [CPU 使用率達 100%下一個主要版本中的.NET Framework。增強 XmlDocument 時執行 XPath 查詢,且 XSLT 轉換不是.NET Framework 的未來版本的設計目標,符合 XPathDocument 效能。

XPathDocument 類別是在.NET 應用程式必須在 XML 資料上執行 XPath 查詢或 XSLT 轉換時載入 XML 中建議的介面。 如果您遇到這個問題,修改您的程式碼使用 XPathDocument 物件,以提供來源 XML XSLT 轉換程序。

當您使用 xsl:key 效能變慢

xsl:key XSLT 項目經常用來將 XML 資料分組或識別唯一個指定的項目或來源 XML 中的屬性值。 使用轉換在.NET 應用程式中的 XML 資料時,使用 xsl:key 元素的 XSLT 樣式表展示區效能變慢。這發生已知問題在 XSLT 處理器實作 xsl:key 元素在 RTM 版本的.NET Framework 中。

目前使用修正,以解決這個問題。 如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
324478與受管理的剖析器的 XSLT 效能變慢

受管理的內嵌指令碼區塊不正確釋放產生的組件

在.NET] Framework Managed 組件會產生和載入隱含地執行所包含的程式碼中內嵌 <msxsl:script> 區塊。已知的問題在 RTM 版本的.NET Framework 中可防止這些組件無法正確卸載轉換程序完成時。這個異常狀況會導致增量增加中如果受影響的樣式表重複地載入到執行 XSLT 轉換,因而導致系統效能中拖放的記憶體使用量。只有回收主機處理程序時,才會被釋放 unreleased 的記憶體。 如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
316775PRB: 無法卸載您建立並使用指令碼在 XSLT 中載入的組件
如果要解決這個異常狀況在 ASP.NET 應用程式,受影響的樣式表只能有一個時間期間的應用程式生命週期的載入樣式表,在 ASP.NET 快取記憶體中的快取和重複使用快取的版本的更新版本的轉換。在 Windows Form 和主控台應用程式專案,您可以使用全域 XslTransform 物件執行個體來載入受影響的樣式工作表,在應用程式啟動及執行更新版本的轉換。這些因應措施方法時必須在無狀態的環境中執行 XSLT 轉換是不適用 (比方說中間層企業服務元件)。

Microsoft 建議您實作自訂 XPath 擴充程式函式並避免這個異常狀況產生的副作用,使用 XSLT 擴充物件。

?考

如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
313997在.NET 應用程式中執行 XSLT 轉換的資訊: 藍圖

屬性

文章編號: 325689 - 上次校閱: 2004年1月23日 - 版次: 3.3
這篇文章中的資訊適用於:
  • Microsoft .NET Framework Class Libraries 1.0
  • Microsoft .NET Framework Class Libraries 1.1
關鍵字:?
kbmt kbinfo kbxml KB325689 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:325689
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
依現狀不再更新的知識庫內容免責聲明
本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com