Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: Dynamische Arrays - Overhead

  Alt 24. Okt 2009, 18:02
Gut, dieses Beispiel liefert auch schon in Delphi 7 "theoretisch" sehr gute Ergebnisse,
> im Durchschnitt weniger als 10 kopiervorgänge
also nicht nur in neueren Delphi-Versionen.
Delphi-Quellcode:
Var A: Array of String;
  i, C: Integer;
  P: Pointer;

Begin
  A := nil;
  C := 0;
  P := Pointer(A);
  For i := 1 to 50000 do Begin
    SetLength(A, i);
    If Pointer(A) <> P Then Inc(C);
    P := Pointer(A);
  End;
  MessageBox(0, PChar(Format('%d von %d wurden kopiert', [C, 50000])), '', 0);
End;
Aber das ist nur ein Optimum, da in der Regel noch andere Speicheroperationen zwischendurch stattfinden und somit vermutlich oftmals der Speicher hinter dem Array belegt sein wird, womit es also dann doch nicht so oft Inplace vergrößert werden kann.


Also, im Prinzip stimmt es, daß hier nicht so der rießige Flaschenhals drinsteckt, wie man glauben könnte,

aber dennoch kann man es im Notfall noch optimieren, durch ein größeres Änderungsintervall.
- seltenere Initialisierungen/Finalisierungen der Elemente (je nach Datentyp)
- auch seltenere Zugriffe auf den Speichermanager
- eventuell auch seltenere Realocierungen ... jenachdem wie optimal es der MM normalerweise machen könnte


Es kommt also auf den Einzel fall drauf an, ob man es noch etwas optimieren kann/muß.


Zitat:
aber statt ca 4 mb braucht die tabelle halt 50mb ram
Stichwort Speicherfragmentierung
$2B or not $2B
  Mit Zitat antworten Zitat