Announcement

Collapse
No announcement yet.

Performance-Optimierung gesucht (komplex)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Performance-Optimierung gesucht (komplex)

    Hallo Performance-Optimierer,

    ich habe folgende XPath (mit Schleifen, Variablen, etc.)Abläufe zu optimieren, und erhoffe mir bei meinen mehreren MB grossen XML Quelldateien eine Verbeserung (momnentan kann man da schon mal ein paar Minuten warten!)

    Falls jemand einen Tipp hat - rührt euch einfach - jede Sekunde an Optimierung zählt :-)

    Die Frage ist auch, bringt es eine OPTIMIERUNG, wenn man die Tags vom Namen her verkleinert? - immerhin würde der gebrauchte Speicher reduziert.

    Am Besten Ihr kopiert euch den Quellcode in einen Editor (wegen der übersichtlicheren Darstellung) und dann in eine XML und in eine XSL Datei falls ihr das Testen wollt.Dazu muss man wissen, dass die XML Datei folgendermassen aufgebaut ist:
    <MONATS_STATISTIK>
    <DZ>
    <PARTNER>bank1</PARTNER><TYP>ZAHLVK</TYP><DATUM>20010802</DATUM>
    <BEGIN>040654</BEGIN><END>040916</END><DAUER>00000020</DAUER>
    <ANZAHL>01</ANZAHL><BYTES>00013576</BYTES><AUNR>20010801024906151563</AUNR>
    </DZ>
    <DZ>
    <PARTNER>bank2</PARTNER><TYP>ZAHLVK</TYP><DATUM>20010802</DATUM>
    <BEGIN>040654</BEGIN><END>040916</END><DAUER>00000020</DAUER>
    <ANZAHL>01</ANZAHL><BYTES>00090000</BYTES><AUNR>20010801024906151563</AUNR>
    </DZ>
    </MONATS_STATISTIK>

    => Man kann diese Datenzeilen DZ einfach beliebig vervielfältigen um mehrere MB grossen XML Dateien zu bekommen.

    Hier nun die XSL Datei:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:decimal-format name="bytes_uebersicht" decimal-separator="," grouping-separator="." infinity="-" />

    <xsl:template match="MONATS_STATISTIK">
    <html>
    <head></head>
    <body>
    <table>
    <tr>
    <td>DFÜ-Partner</td>
    <td>Arbeitstage</td>
    <td>Gesamtvolumen<br/>(Bytes</td>
    <td>Gesamtzeit<br/>(Sekunden)</td>
    <td>Durchschnittsvolumen<br/>(Bytes pro Tag)</td>
    <td>Durchschnittszeit<br/>(sec pro Tag)</td>
    <td>Spitzenvolumen<br/>(pro Anschaltung)</td>
    </tr>

    <xsl:variable name="dfu-partner" select="//PARTNER[not(.=following::PARTNER)]"/>
    <xsl:for-each select="$dfu-partner">
    <tr>
    <xsl:variable name="aktueller_Partner" select="."/>
    <td align="middle"><b><xsl:value-of select="$aktueller_Partner"/></b></td>
    <xsl:variable name="unique-list" select="count(//DZ[contains(PARTNER,$aktueller_Partner)]/DATUM[not(.=following:ATUM)])"/>

    <td align="middle"><b><xsl:value-of select="$unique-list"/></b></td> <!-- Arbeitstage -->

    <td align="middle"><b><xsl:value-of select="format-number(sum(//DZ[contains(PARTNER, $aktueller_Partner)]/BYTES), '###.###', 'bytes_uebersicht')"/></b></td> <!-- Gesamtvolumen in Bytes -->
    <td align="middle"><b><xsl:value-of select="format-number(sum(//DZ[contains(PARTNER, $aktueller_Partner)]/DAUER), '###.###', 'bytes_uebersicht')"/></b></td> <!-- Gesamtzeit in sec -->
    <td align="middle"><b><xsl:value-of select="format-number(sum(//DZ[contains(PARTNER, $aktueller_Partner)]/BYTES) div $unique-list, '###.###','bytes_uebersicht')"/></b></td> <!-- Durchschnittsvolumen in Bytes pro Tag = Gesamtvolumen div Arbeitstage -->
    <td align="middle"><b><xsl:value-of select="format-number(sum(//DZ[contains(PARTNER, $aktueller_Partner)]/DAUER) div $unique-list, '###.###','bytes_uebersicht')"/></b></td> <!-- Durchschnittszeit in sec pro Tag = Gesamtzeit div Arbeitstage -->

    <xsl:for-each select="//DZ[contains(PARTNER, $aktueller_Partner)]"> <!-- Liste aller Anschaltungen einer Bank wird erstellt -->
    <xsl:sort select="BYTES"/> <!-- sortiert nach Bytes um das Spitzenvolumen zu finden -->
    <xsl:if test="position() = last()">
    <td align="middle"><b><xsl:value-of select="format-number(BYTES, '###.###', 'bytes_uebersicht')"/></b></td> <!-- Spitzenvolumen ausgeben -->
    </xsl:if>
    </xsl:for-each>

    </tr>
    </xsl:for-each>

    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>

  • #2
    Wazu überall die Doppelslashes (//)? Die sind doch gar nicht notwendig, da die gewünschten Elemente immer auf der selben Ebene sind. Und der Doppelslash führt im Grunde dazu dass ersteinmal eine Liste aller Elemente darunter gebildet wird. Das ist natürlich langsam. <BR>
    <BR>
    gruß, marc

    Comment

    Working...
    X