Link: Wichtiger Hinweis in eigener Sache!
| Autor: Klaus Keller | Erstellt am: 2006-11-18 | Aufrufe: 22231 |
Ein Problem beim Umgang mit einem Array in VBScript ist die Tatsache, daß VBScript (noch?) keine Sortierfunktion für ein Array enthält. Um ein Array zu sortieren sind daher eigene Anstrengungen notwendig. Dabei stellt sich die Frage, welche Möglichkeiten es gibt und welche davon die beste ist.
Um dies herauszufinden werden in diesem Tipp gleich mehrere Techniken und Ansätze verglichen. Zum Einsatz kommen die übrigen Verdächtigen wie BubbleSort, QuickSort und HeapSort. Desweiteren wird das Recordset in den Vergleich mit einbezogen. Ziel es nicht nur, die schnellste Sortiermöglichkeit zu finden, sondern auch jene, die nach Anzahl der Datensätze schnell und zuverlässig arbeitet. Ins Rennen geschickt wird dabei ein weiterer Kandidat der sicherlich nicht zu den sonst üblichen Verdächtigen gehört. Ein heimlicher Favorit!
10 Datensätze sortieren, das dürfte wohl keine Schwierigkeit sein. Aber was ist mit 100, 1.000, 10.000 oder gar 100.000? Hier trennt sich die Spreu vom Weizen. Fünf Prozent mehr oder weniger an Bearbeitungsdauer. Sicherlich ein guter Wert, wenn jedoch die beste Sortiermöglichkeit zur schlechtesten mehr als 300mal schneller ist klingt das schon mal beeindruckender, oder? Und wer ist der Sieger? Das wird noch nicht verrraten. Nur soviel: Einen eindeutigen Sieger gibt es nicht, ein Sieger dürfte für Sie jedoch eher unerwartet sein.
Verglichen wird die Leistungsfähigkeit. Aber was bedeutet das? Nicht nur die Geschwindigkeit, sondern auch Speicherverbrauch und die Tatsache, daß eine Aufgabe überhaupt erfüllt wird. Besonders bei grösseren Datenmengen kann eine Sortierung fehlschlagen. Ein weiterer wichtiger Punkti ist eine Anpassungsmöglichkeit, die Durchführbarkeit von individuellen Wünschen.
Die Sortierung unter ASP kann unter mehreren Umständen misslingen. Vor allem wenn es sehr viele Datensätze bzw. sehr viel Daten sind. Zum einen kann aufgrund des zeitlichen Aufwands ein Timeout ausgelöst werden. Dazu kann die Speichernutzung zu hoch sein. Hier ist nicht nur der Physische Speicher zu berücksichtigen. Auch der IIS kann da schon mal eine Fehlermeldung von sich geben.
Sind es sehr viele Datensätze, so kann unter Umständen sogar ein Umweg über eine Datenbank erforderlich sein. Die Datensätze werden dort "zwischengespeichert" und per Order By wie gewünscht sortiert ausgegeben. Im ASPKurs > Array, Dictionary & Recordset sind die Alternativen zum Array, Dictionary und Recordset beispielhaft erklärt. Bei einem mehrdimensionalen Array sind diese Alternativem erfahrungsgemäß vorzuziehen.
Um die Leistungsfähigkeit jeder Sortiermöglichkeit bestmöglich zu erfassen werden zum einen Zahlen und ein Textblock jeweils zu sortieren sein, dabei sind 10, 1.000, 10.000 und 100.000 Elemente je Array vorhanden. Gemessen wird die Zeit mit dem Profiler den ich Ihnen bereits in Tipp 75: Performance-Messung mit Profiler vorstellte. Aber nicht nur die Zeit ist wichtig, sondern auch die Tatsache, daß eine Sortiermöglichkeit überhaupt mit der Aufgabe zurecht kommt.
Zum Speicherverbrauch: Dazu habe ich leider kein exaktes Messinstrument bzw. ein Programm, auch weil es im laufenden Betrieb eher schwierig zu messen ist. Gemessen habe ich den Speicherverbrauch jedoch mit etwas "herkömmlichen" Mitteln. dazu wurde der Task-Manager verwendet. Zuerst wurde festgestellt, wieviel Arbeitsspeicher vor dem Test belegt war. Dann während dem Test wurde der höchste Wert genommen. Nach dem Test sollte der durch den Test belegte Speicher freigegeben werden, hier zeigt sich nur minimale Unterschiede von vor dem Test, so daß "Arbeitsspeicher-Verbrauch vor dem Test" - "Höchster Arbeitsspeicherverbrauch während des Tests" = Die Menge an Arbeitsspeicher, die der Algorhitmus benötigte. Natürlich geht die Angabe nicht in einzelne KByte, dazu ist die Messung zu ungenau. Ist jedoch dennoch eine gute Möglichkeit um den Speicherbedarf festzustellen.
Für den Test wurden Datensätze zunächst in einer Textdatei gespeichert. Von dort werden diese dann einem Array zugeführt. Wobei es dann noch zu einem zweiten Vergleich kommt, wer ist schneller, die Zuweisung an das Array, dem Dictionary und dem Recordset? Nicht zu vergessen der heimliche Favorit. Die Daten müssen ja auch zur Verfügung gestellt werden. Als Text wird einfach ein sinnloser Text verwendet, dieser wurde mit einem Zufallsgenerartor ermittelt. Sowohl der Text selbst wie auch die Textlänge, die zwischen 10 und 250 Zeichen liegt. Zahlen die zu sortieren sind liegen zwischen 1 und 1.000.000.
Nun aber genug, auf in den Test!
Seite 1: Eindimensionales Array sortieren Seite 2: Eindimensionales Array sortieren - Bubblesort Seite 3: Eindimensionales Array sortieren - CombSort Seite 4: Eindimensionales Array sortieren - HeapSort Seite 5: Eindimensionales Array sortieren - QuickSort Seite 6: Eindimensionales Array sortieren - Recordset Seite 7: Eindimensionales Array sortieren - Der heimliche Favorit Seite 8: Eindimensionales Array sortieren - Fazit
|