AGB  ·  Datenschutz  ·  Impressum  







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

TStrings Speicher

Ein Thema von Quake · begonnen am 23. Mär 2006 · letzter Beitrag vom 24. Mär 2006
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von himitsu
himitsu

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

Re: TStrings Speicher

  Alt 23. Mär 2006, 19:51
In einer StringListe gibt es keine einzelnen Strings, die Stringinhalte werden aller der Reihe nach in einen gemainsamen Speicherbereich geschrieben und per SLineBreak getrennt, also da ist nichts mehr mit einem Referenzzähler und gemeinsamem Speicher, welche sich zwei Strings teilen ... beim Aufruf von ComboBox2.Items[i] wird intern ja auch erst ein String erzeigt, in welchen dann die entsprechenden Stringdaten reinkopiert werden ... und wenn man einen String an ComboBox2.Items[i] übergibt, dann wird dessen inhalt ebenfalls in den großen, gemeinsamen Speicherbereich der Stringlist kopiert ... wie gesagt, egal wie ihr die Strings übergebt es sind und bleiben zwei unabhängige Speicherblöcke und demnach können die Daten nur Doppelt vorhanden sein.
$2B or not $2B
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#22

Re: TStrings Speicher

  Alt 23. Mär 2006, 20:31
Zitat von himitsu:
In einer StringListe gibt es keine einzelnen Strings
Und warum nutzt TStringList dann bitte schön ein "händisches" dynamisches Array of TStringItem? Die Text- und CommaText-Eigenschaft durchläuft dieses Array und baut die Strings zu einem Gesamtstring zusammen. Also kann hier die Referenzzählung greifen.

Bei TListBox und TComboBox wird aber keine TStringList benutzt sondern eine spezielle TListBoxStrings bzw. TComboBoxStrings. Und die überlässt die String-Verwaltung dem Windows Control. Hier greift die Referenzzählung natürlich nicht (außer man verwendet Unicode-Controls mit WideString).
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: TStrings Speicher

  Alt 24. Mär 2006, 10:29
Zitat von jbg:
Und warum nutzt TStringList dann bitte schön ein "händisches" dynamisches Array of TStringItem? Die Text- und CommaText-Eigenschaft durchläuft dieses Array und baut die Strings zu einem Gesamtstring zusammen. Also kann hier die Referenzzählung greifen.
Also mir ist/war so, als wäre das genau andersrum, TStringItem baut doch auf TStrings/TStringList auf?
Und dort stehen die Strings alle in einer Reihe, da ist dann kein Platz merh, für die Refferenzzähler, Längenangaben und was sonst noch in so'nem LongString enthalten ist (neben dem reinem Text).
$2B or not $2B
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#24

Re: TStrings Speicher

  Alt 24. Mär 2006, 12:07
Zitat von himitsu:
Also mir ist/war so, als wäre das genau andersrum, TStringItem baut doch auf TStrings/TStringList auf?
Dann schau mal in den Quellcode von Classes.pas. TStringItem baut überhaupt nicht auf TStrings/TStringList auf. Das ist andersherum:

Code:
  PStringItem = ^TStringItem;
  TStringItem = record
    FString: string;
    FObject: TObject;
  end;
Zitat:
Und dort stehen die Strings alle in einer Reihe, da ist dann kein Platz merh, für die Refferenzzähler, Längenangaben und was sonst noch in so'nem LongString enthalten ist (neben dem reinem Text).
Und was ist dann das:
Code:
  PStringItemList = ^TStringItemList;
  TStringItemList = array[0..MaxListSize] of TStringItem;

  TStringList = class(TStrings)
  private
    FList: PStringItemList;
Einer von uns versteht das Konstrukt Array wohl im Moment nicht mehr.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#25

Re: TStrings Speicher

  Alt 24. Mär 2006, 12:24
Zitat von jbg:
Zitat von Bernhard Geyer:
Das hat damit nichts zu tun da TComboBoxStrings ein Nachfolger von TStringList und das Win32-Control davon nichts weis.
Das wäre mir neu:

TCustomComboBoxStrings = class(TStrings);
TComboBoxStrings = class(TCustomComboBoxStrings);

Und TStrings speicher die Strings nicht selbst. TComboBoxStrings nutzt SendMessage um die Strings zu setzen bzw. zu lesen.
OK. Hast mich überzeugt. Dachte aber das es nur einfach 'ne Ableitung des Ableitungswillens ist und nicht 'ne komplette andere Implementierung.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: TStrings Speicher

  Alt 24. Mär 2006, 13:46
hmm, und ich dachte TStringList hat die Stringbehandlung von TStrings geerbt und nichts eigenes verwendet
$2B or not $2B
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#27

Re: TStrings Speicher

  Alt 24. Mär 2006, 13:50
TStrings is eine anstrakte Klasse, die bis auf die nötigen Methodendeklarationen nichts wirkliches zu bieten hat.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 02:46 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