INFO: Techniken zur Verbesserung der Leistung von XSL-Transformationen

Zusammenfassung

Dieser Artikel listet einige Verfahren zum Verbessern der Leistung von Transformationen (XSL = Extensible Stylesheet Language). XSL ist eine funktionelle Sprache. XSL unterstützt keine gemeinsame Sprache. Beispielsweise unterstützt XSL Rückgabewerte oder Global nicht. XSL ist eine objektorientierte Sprache und als modulare Taktzyklen Kosten. Gibt keine Debug XSL, daher das Debuggen schwierig.

Weitere Informationen

Leistung einer XSL-Transformation hängt die Szenarien, die Sie verwenden. In diesem Artikel aufgeführten Verfahren sind allgemeine Richtlinien. Stellen Sie sicher, dass die Ergebnisse der einzelnen tuning messen. Nur Tests kann prüfen, ob ein bestimmtes Verfahren die Leistung verbessert. Das Befehlszeilendienstprogramm msxsl.exe können für Tests und auszuführende Befehlszeile XSL-Transformationen mit Microsoft XSL-Prozessor Sie. Das Dienstprogramm msxsl.exe ruft Microsoft XML Parser 4.0 (msxml4.dll) um die Transformation durchzuführen. Sie können dieses Dienstprogramm von der folgenden MSDN-Website herunterladen:

Techniken zur Verbesserung der Leistung

  • Identifizieren Sie häufigste Codepfade Rendern Seiten und Optimieren Sie diese Pfade. Abschnitt neu eingesetzten XSL zu optimieren.
  • Anstatt Unterelemente verwenden Sie Attribute. Anstelle von Elementen Attribute verbessert die Leistung. Bei XPath-Spiele sind Attribute schneller, da sie lose typisiert. Dies erleichtert die Überprüfung des Schemas.
  • Expliziter Pfade anstelle von "/ /" möglichst. Wenn XML-Daten groß ist "/ /" rekursive verstorbenen Suche ist sehr teuer. Bestimmte XPath-Ausdruck wird schneller implementiert.
  • Wenn Attributwerte verglichen verwenden Sie Enumerator Attribute. Verwenden Sie mehrere Attributnamen als Bits und festlegen Sie ihre Werte true oder false. Beispiel:
    <element_name attr1="1" attr2="1" attr3="0">
  • Verwenden Sie Skript nicht. Skript setzt die Leistung.
  • Vergleichen Sie direkt nach Namen, um die Leistung zu verbessern. Statt mit dem folgenden Code:
    ./info[type='title']
    Verwenden Sie den folgenden Code:
    ./title
    Vergleicht Werte anstelle des Namens:
    Select="*[name()='sample']"
    Verwenden Sie den folgenden Code:
    Select="sample"
    Aufgrund der Namespace im XPath sind nicht identisch.
  • Alle Versionen von MSXML, Version 3.0 und höher werden mit der expliziten Indexfilter. Die Verbesserung der Leistung hängt von der Position des Elements in der Child-Liste des übergeordneten Elements. Anstatt die folgenden:
    /child_element
    Verwenden Sie Folgendes:
    /child_element[1]
  • Verwenden Sie Parameter, statt die Abfrage jedes Mal.
  • XSL-Transformationen können mehrere Optionen, jedoch alle möglicherweise nicht erreichen eine. Statt mithilfe der folgenden:
    <xsl:output method="html"/>
    Verwenden Sie die folgende Transformationen:
    <xsl:output method="html" indent="no" />
    Dies verbessert die Leistung, da Einzug viele unerwünschte Leerzeichen in die Ausgabe bietet. Standardmäßig ist der Wert für das Attribut Einzug Ja.
  • Die Vorlage Inline mit für jede oder Mode-Attribut , wenn Sie sicher sind, dass die Vorlage anwenden genau eine Vorlage entspricht. Beispiel:
    <xsl:apply-templates select="//xa:Axes/xa:Axis[@name='Axis1']" /><xsl:template match="//xa:Axis[@name='Axis1']/xa:Tuples/xa:Tuple">
    Für jeden Knoten, der die folgenden entspricht:
    "//xa:Axes/xa:Axis[@name='Axis1']"
    Der folgende Ausdruck:
    "//xa:Axis[@name='Axis1']/xa:Tuples/xa:Tuple"
    auf allen anderen Vorlagen mit denselben ausgewertet. Prozessor beginnt Standardvorlagen. Dies kopiert alle Textknoten und ruft die folgenden:
    <xsl:apply-templates>
    für alle Elemente. Daher wird für alle Kinder des ursprünglichen Knotensatz Treffer Ausdruck ausgewertet. Den Ausdruck entspricht, ist nicht einfach. Schreiben Sie den Code wie folgt, um die Leistung zu verbessern:
    <xsl:apply-templates select="//xa:Axes/xa:Axis[@name='Axis1']/xa:Tuples/xa:Tuple" mode="Axis1"/><xsl:template match="*" mode="Axis1">
  • Verwenden Sie weniger Vorlagen. Dies ist anwendbar, wenn dieselbe Vorlage mehr als einmal ausführen. Einige verbessert Leistung mit für jede Schleife, um nach einer Vorlage suchen, weniger wird die Anzahl der Vorlagen.
  • Reduzieren Sie die Verwendung von Xsl: auswählen / When / Xsl: andernfalls. Leistung erfolgt beim Klausel andernfalls die Mehrheit der Auswahl fortfahren. Daher beimentsprechen Sie und vermeiden Sie andernfalls verwenden, wenn Sie wissen, dass ein bestimmter Wert vorhanden ist.
  • Xsl:Variables sind dynamische Werte. Diese Variablen sind nicht im Cache und Laufzeit alle, auf die sie verwiesen in XSL. Explizite Typumwandlung von xsl: Variable verbessert die Leistung. Kann mit string() und boolean() Funktionen geben. Beispiel:
    <xsl:variable name="_attr" select="string( /node/child[ @attr ] )">
  • MSXML und System.Xml
    • MSXML Parser unterscheidet XmlReader und XmlWriter.
    • MSXML lädt XML-Daten in eine (DOKUMENTOBJEKTMODELL). Aus diesem DOM-Struktur können Daten problemlos Navigation über XPath, über XSL, transformiert oder bearbeitet und wieder gespeichert. Dadurch einfacher Entwicklung und leistungsfähigere Speicherverwendung und Geschwindigkeit.
    • XmlReader und XmlWriter sind sequenzielle Readern und Writern. Der Entwickler verwaltet den Zustand manuell beim Lesen und Schreiben von XML-Daten. Dies ermöglicht den minimaler Speicherbedarf und daher verbessert die Leistung.
    • Der MSXML-Parser unterstützt auch SAX (Simple API for XML). SAX ist sequenziell. .NET Framework unterstützt auch DOM mithilfe der XmlDocument -Klasse.
    • Die beste Wahl hängt von der Nutzung von .NET Framework und auf die Aufgabe, die mit XML.
  • Dieses Verfahren bezieht sich auf die Leistung mit Datenbank. MSXML und System.Xml Leistung können verbessert werden, vor beitreten Nachschlagefelder wie im folgenden Code dargestellt:
    <?xml version="1.0" encoding="UTF-8"?><AllLocalDescriptor xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <Descriptor key="AMC_Labels_" ID="AMC" Name="-2000" TypeName="Labels" LCID="">
    AMC
    </Descriptor>
    <Descriptor key="AMC_Labels_3082" ID="AMC" Name="-2000" TypeName="Labels" LCID="3082">
    AMC
    </Descriptor>
    Vermeiden Sie @key vom Typ ID deklariert Scannen
    desc = doc.getNodeFromID("AMC_Labels_3082")

Referenzen

Weitere Informationen finden Sie auf folgenden Websites von Microsoft Developer Network (MSDN):Weitere Informationen zur Leistung von XSLT klicken Sie auf die folgenden Artikelnummern klicken, um die Artikel der Microsoft Knowledge Base:
325689 INFO: Leistung von XSLT-Transformationen in.NET Framework
331026 show Me How: Optimieren der Leistung meiner Xslt Stylesheet in .NET mit "System.xml"
FEHLER #: 2865 (Content Maintenance)
Eigenschaften

Artikelnummer: 815124 – Letzte Überarbeitung: 10.01.2017 – Revision: 1

Feedback