AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TStringList.Capacity Zuweisung?

Ein Thema von PeterPanino · begonnen am 28. Dez 2012 · letzter Beitrag vom 29. Dez 2012
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: TStringList.Capacity Zuweisung?

  Alt 29. Dez 2012, 17:58
Der Grund meiner Frage war folgender: Wenn man in einer StringList die Capacity z.B. auf den Wert 10 einstellt, sollten beim StringList.LoadFromFile maximal 10 Zeilen gelesen werden (auch wenn die Datei etwa 100 Zeilen hat). Wäre eine solche Vorgangsweise möglich? Oder müsste man dazu eher die Methode LoadFromFile überschreiben?
Ich würde hier eine angepasste LoadFromFile-Methode schreiben.
Das Capacity-Property ist ein Property das nur die interne Speicherverwaltung steuert. Normalerweise wächst die Capacity entsprechend der schon vorhandenen größe immer um ein bestimmten Prozentsatz. Das führt bei großen Listen dazu das häuft die größe Zeitintensiv angepasst werden muss.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#12

AW: TStringList.Capacity Zuweisung?

  Alt 29. Dez 2012, 18:24
Der Grund meiner Frage war folgender: Wenn man in einer StringList die Capacity z.B. auf den Wert 10 einstellt, sollten beim StringList.LoadFromFile maximal 10 Zeilen gelesen werden (auch wenn die Datei etwa 100 Zeilen hat). Wäre eine solche Vorgangsweise möglich? Oder müsste man dazu eher die Methode LoadFromFile überschreiben?
Ich denke Capacity ist für etwas anderes Gedacht. Bevor man mit Add einen String anfügt, wird vorher der Speicher der Liste z. B. um 1 erhöht, so dass nun ein String angefügt werden kann. Allerdings ist das nicht optimal für jeden String den Speicher separat zu erhöhen, also wird mit Capacity etwas Speicher auf Vorrat reserviert (Capacity ist also immer Count plus Etwas). StringList macht das eigentlich automatisch, ich glaube 4, 8, 16 , usw. Wenn also vier Strings in StringList drin sind, wird für acht weitere Strings der Speicher reserviert. Sind die voll, für die nächsten 16 Strings usw. Wie gesagt, dass passiert automatisch, so dass man Capacity kaum selbst nutzt. Interessant wird das erst wenn man vorher weiß, dass man z. B. 1000 Strings einfügt. Statt also, dass TStringList alle paar Strings eine Pause machen muss um die Kapazität zu erhöhen, kann man mit Capacity gleich selbst für 1000 Strings den Speicher reservieren. Dafür ist es gedacht. Es wird eigentlich automatisch genutzt, man kann es unter bestimmten Bedingungen aber auch selbst nutzen.

Geändert von Popov (29. Dez 2012 um 18:27 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz