Hallo,
ich habe eine string hash-table (ohne verkettete liste).
Zuerst ein paar Zeilen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| Type Thash_name=record h_name:string; h_tiefe:byte; end;
var hashmax:cardinal; hashliste:array of Thash_name;
for x:=1 to length(hash_string) do hash_wert:=(hash_wert * ord(hash_string[x])) mod length(hashliste); if (hash_wert)>length(hashliste) then begin hash_wert:=length(hashliste); end;
if hashliste[hash_wert].h_name='' then begin hashliste[hash_wert].h_name:=hash_string; hashliste[hash_wert].h_tiefe:=h1_tiefe; |
Das Problem liegt ganz genau in folgender Zeile:
Delphi-Quelltext
1:
| hashliste[hash_wert].h_name:=hash_string; |
Wenn ich nun mehrere Eintraege habe, dann wird es sehr, sehr langsam.
Wenn ich genau diese Zeile ausklammere, wieder verdammt schnell.
Komischerweise bei
Delphi-Quelltext
1:
| hashliste[hash_wert].h_tiefe:=h1_tiefe; |
was auch ein Eintrag-Vorgang ist, macht es nichts aus.
An den dyn. arrays kann es nicht liegen.
Ich weiss, dass es im Grunde nur Zeiger sind, und das einfügen und löschen Zeit kostet.
Ich weise aber ja nur ein Wert zu.
Ich verstehe also nicht, warum es ploetzlich so langsam wird.
Moderiert von
Martok: Delphi-Tags hinzugefügt