Einzelnen Beitrag anzeigen

Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#47

Re: Große Datei sortieren ohne komplett in den Speicher zu l

  Alt 17. Mär 2009, 21:30
Gesehen, aber nichts bei gedacht Lasse eine Testreihe laufen... melde mich gleich wieder.

***

So... also nachdem ich komische Ergebnisse hatte, hab' ich gleich mal eine Test-Datei erstellt:

500.000 Random-Lines A-Z (variable Länge 1-20 Zeichen), zusätzlich ubel, Ubel, übel & Übel um DIN-Sortierung zu testen. Die Datei ist in der Anlage (ausgepackt knapp 6 MB).

Zuvor hatte ich ja ein 600.000 Zeilen starkes Wörterbuch, das aber A-Z vor a-z sortiert hatte (ich sortierte gleich Case Insensitive, weshalb das gut zum Testen war). Die Werte der neuen Datei schmettern mich aber nieder...
Code:
SorterTestFile   himitsu(1) himitsu(2) alzaimar(3) satty(4) TList.Sort(5)

Prefetch=0      24781 ms   36641 ms   1735 ms      24968 ms 2515 ms
Prefetch=4      17937 ms   29672 ms   1706 ms      18791 ms
Prefetch=8      17171 ms   28516 ms   1757 ms      17328 ms
Prefetch=16     14797 ms   26344 ms   1735 ms      15172 ms
Prefetch=1024   14110 ms   26000 ms   1765 ms      14438 ms

Wörterbuch 8,5 MB

Prefetch=1024   8375 ms    22125 ms   3156 ms     6750 ms  3640 ms
(1) TempSize 128 Byte, API-Funktionen
(2) TempSize 64 KB
(3) csSkipList, Keine DIN-Sortierung möglich! Vorerst noch disqualifiziert wegen cheaten.
(4) QuickInsertSort, relativ hoher Speicherbedarf
(5) Einfach aber auch großer Speicherbedarf, Ignoriert PrefetchSize

Jetzt muss man dazu sagen, das TList.Sort als Speicherliste schlechter sortiert. Boden geht hier wohl beim Laden aus der Datei verloren (TList läd' ja einfach alles rein).

Die Klasse csSkipList bekomme ich nicht zum Ansi-Sortieren. Blicke bei dem Teil immer noch nicht ganz durch, aber denke das es eine Binäre Einordnung der Strings braucht (AnsiCompareStr oder AnsiUpperCase bricht mit Zugriffsverletzung ab.. in Insert wählt der Code irgendwann einen Node.ndKey mit Wert NIL als Vergleichs-String).

PS: Das 64 K TempSize langsamer ist, ist kein Fehler... kannst ja jetzt selber testen...

€: Werte SkipList korrigiert (war noch ignoreDuplicates=True), ändert aber nicht viel...
Angehängte Dateien
Dateityp: 7z sortertestfile_139.7z (796,0 KB, 11x aufgerufen)
  Mit Zitat antworten Zitat