-
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
18. Mär 2009
ich hatte mal versucht das AnsiCompareString aufzusplitten
füllte vorher ein Array mit den Vergleichswerten und geh dann beim Vergleich darüber.
jupp, Parent hätt ich auch weggelassen (wenn man wirklich mal zurück muß, dann könnte man sich ja notfalls den Rückweg kurz merken)
-
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
18. Mär 2009
wie wäre es eigentlich, wenn statt dem Prefetch ein Bäumchen für die ersten Buchstaben genutzt würde?
bei richtiger Implementierung dürfte dann, egal wie groß "prefetch" wäre, der Speicherverbrauch nicht (groß) ansteigen.
da könnte man dann beim Laden diesen baum schon teilsortiert anlegen und müßte dann nur noch die Zweige sortieren.
-
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
17. Mär 2009
je 5-20 Zeichen pro Zeile
so, mein Laden/Speichern ist schneller, aber dafür dein sortieren
wobei ich grad eine 14 MB Datei / 1.000.000 Zeilen
mit Prefetsch 0
bei mir in 58 und bei dir in 70 Sekunden durchbekam :stupid:
-
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
17. Mär 2009
ich hab grad mal dein Program (anderer Thread #1) auf eine 138 MB-Datei losgelassen (alzaimar's Zufallswertedatei)
und es meinte es war nach 220ms fertig ... tatsächlich waren es nur 14 Minuten
(prefetch 0 .. bei größeren werten bekam ich nach wenigen Seunden eine "Zu wenig Arbeitsspeicher."-Meldung)
ok, Stopuhr = Word = maximal ~65.000 millisekunden
ich find es aber schon komisch,...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
17. Mär 2009
man erlebt immer wieder Wunder ... wie was nicht so geht, wie man denken würde :shock:
wie schlechter sortiert?
(notfalls kannst'e auch da die Vergleichsroutine ersetzen)
-
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
17. Mär 2009
sag mal, hattest du zufällig bei deinem Geschwindigkeitstest diese Zeile bemerkt?
Const TempSize = {64 * 1024}128; // 64 KB
hatte zum Testen, ob der richtig einliest, die Größe verringert und wohl vergessen es wieder rauszunehmen :oops:
so wäre es richtig:
// Zeile 28+29
Const TempSize = 64 * 1024; // 64 KB
FileIndexBlock = 1024 * 1024 div...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
16. Mär 2009
da sollte man wohl das "oftmals" so verdamte delphiinterne Caching bei diesen alten Funktionen nicht all zu sehr verdammen :angel2:
eine Lesecache hab ich ja (in)direkt eingebaut ... mal sehn was passiert, wenn auch eine Schreibcache enthalten ist.
stimmt denn wenigstens die Sortierung?
ach ja, nicht wegen der eingebauten Funktion AnsiCompareText wundern ... wollte es morgen mal in...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
16. Mär 2009
joar, ist wohl 'nen knuffier Fehler im Delphi/C++-Compiler, :angel2:
welchen es im D7 nicht mehr gibt (hatte extra D7 genommen, um sowas möglichst zu vermeiden :stupid: )
versuch es mal so:
Function GetLine(Idx: Integer; Var Line: AnsiString): Boolean;
Var W: Cardinal;
i64: LARGE_INTEGER;
Begin
-
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
16. Mär 2009
hab mal das FileQuickSort von Satty67 aus Beitrag #27 von den alten Pascal-Funktionen befreit
und auf direkte WinAPI umgestellt (samt Angabe für Windows zur theoretisch "optiomaleren" Cacheverwaltung),
dann noch in der Callback-Prozedur die Statusstrings durch Enumeratoren ersetzt,
das "Cancel" in die Callback-Prozedur verlegt (Result = false = Abbruch)
und die einzelnen...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
13. Mär 2009
Tschuldschung, hatte wärend des Backups ein paar Minütchen Zeit gefunden :angel2:
Und du hast immerhin noch 'ne Fehlerbehandlung und eine bessere Sortiervariante drin. :thumb:
Ich hatte es mir dagegen mit ReadLn leicht gemacht (muß kein Zeilenende suchen, allerdings sind diese alten Funktionen nicht grad schnell/optimal :oops: ) ... da frag ich mich natürlich warum man bei TFileStrem...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
13. Mär 2009
nicht schön, aber einfach :angel2:
Type TTextListRec = Record
Start: Int64;
Length: Integer;
TextStart: String; // 11+1 = 12 Byte ... insgesammt 24 Byte pro Zeile
End;
TTextList = Array of TTextListRec;
Function FilePos(Var InFile: TextFile): Int64;
Begin
-
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
13. Mär 2009
das mit der Liste wurde ja schon mehrfach gesagt und wenn man darin den Zeilenanfang mit ablegt, kann man estmal grob vorsortieren und müßte dann nur noch für einen Teil der Vergleiche (vor der Zeilenanfang übereinstimmt) die jeweilige ganze Zeilen nachladen.
Var TextList = Array of Record
Start: Int64;
Length: Integer;
TextStart: String; // 11+1 = 12 Byte ......
-
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
12. Mär 2009
wenn es nicht unbedingt schnell sein muß, dann z.B. per TPartialTextfile
oder wenn die datei z.B. aufsteigend sortiert werden soll:
man könnte auch die Datei durchgehn
sich einen Index aller Zeilen anlegen (also wie diese beginnen)
loop:
dann die Datei nochmals duchgehn
sich ein array mit den "kleinsten" Zeilen anlegen (also mit deren Index + Inhalt)
dann zeile für zeile weitergehn...