Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Spring IList - Capacity sinnvoll (https://www.delphipraxis.net/217342-spring-ilist-capacity-sinnvoll.html)

freimatz 13. Jun 2025 13:21

Spring IList - Capacity sinnvoll
 
Ich habe da eine IList:
Delphi-Quellcode:
  Result := TPointList.Create() as IPointList;
  for i := 0 to numPoints - 1 do
    Result.Add(points[i]);
Macht es Sinn nach dem Create ein "Result.Capacity := numPoints" einzufügen? Vielleicht wegen Performance?

stahli 13. Jun 2025 13:26

AW: Spring IList - Capacity sinnvoll
 
Ich habe einfach mal (Interesse halber) den Copilot gefragt...

Copilot
Ja, es macht absolut Sinn, direkt nach dem Create-Aufruf Result.Capacity := numPoints zu setzen – aus Performance-Gründen.

Warum das sinnvoll ist:
Die TList<T>-basierte Klassen (wie vermutlich auch deine TPointList) verwalten intern ein dynamisches Array. Wenn du viele Elemente hinzufügst, ohne vorher die Capacity zu setzen, passiert Folgendes:

Bei jedem Überschreiten der aktuellen Kapazität wird das interne Array vergrößert.
Das bedeutet: Speicher neu allokieren + vorhandene Elemente kopieren.
Das kostet Zeit und Ressourcen, besonders bei vielen Elementen.
Vorteil von Capacity := numPoints:
Du gibst dem internen Array genau den benötigten Speicherplatz.
Dadurch wird kein mehrfaches Reallozieren nötig.
Das spart CPU-Zeit und Speicheroperationen.

---

Ist schon alles erstaunlich.
Spürbar wird das allerdings nur sein, wenn die Funktion ständig ausgeführt wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz