Einzelnen Beitrag anzeigen

Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#20

Re: Performanceproblem mit ca. 30000 Listboxeinträgen

  Alt 13. Mai 2005, 07:43
Zitat von ACE-ppc:
...
Der Trick ist ... das man die Werte der Listbox extra nach int Konvertiert .. s. Unten !
Hai ACE-ppc,

das kann/sollte man noch optimieren
Zitat:
Delphi-Quellcode:
  //werte von Listbox Anzeige in Array of Integer konvertieren
  for i := 0 to Anzeige.Count - 1 do
    begin
      //Array vergrößern
      SetLength(iArray, i + 1);
      //String to Int wndeln
      iArray[i] := StrToInt(Anzeige.Items[i]);
    end;
Du vergrösserst in der Schleife das Array jedes mal um eine Einheit. Das verlangsamt die sache extrem.
Wenn ein dynamisches Array vergrössert wird passiert folgendes:
  • 1. Es wird ein neuer Speicherbereich reserviert der um x Einheiten grösser ist als der alte
    2. Die Daten werden von dem alten Speicherbereich in den neuen kopiert
    3. Der alte Speicherbereich wird freigegeben

Da man ja vor der Schleife weiss wie groß das Array sein muss sollte es also auch einmal auf diese größe gesetzt werdne.
Delphi-Quellcode:
  //Arraygröße festlegen
  SetLength(iArray, Anzeige.Count - 1);
  //werte von Listbox Anzeige in Array of Integer konvertieren
  for i := 0 to Anzeige.Count - 1 do
    begin
      //String to Int wndeln
      iArray[i] := StrToInt(Anzeige.Items[i]);
    end;
Das dürfte noch einmal die Geschwindigkeit erhöhen.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat