Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TStrings Speicher (https://www.delphipraxis.net/65977-tstrings-speicher.html)

Quake 23. Mär 2006 06:55


TStrings Speicher
 
Moin moin.

Ist das so richtig? Wenn ich in einem Form zwei ComboBoxen habe und in beiden Dropdownlisten den selben Inhalt haben möcht und dazu diese Zeile im Code Verwende
Delphi-Quellcode:
ComboBox2.Items=ComboBox1.Items
dass die Liste dann nur einmal im Speicher liegt?

Bernhard Geyer 23. Mär 2006 06:57

Re: TStrings Speicher
 
Zitat:

Zitat von Quake
Moin moin.

Ist das so richtig? Wenn ich in einem Form zwei ComboBoxen habe und in beiden Dropdownlisten den selben Inhalt haben möcht und dazu diese Zeile im Code Verwende
Delphi-Quellcode:
ComboBox2.Items=ComboBox1.Items
dass die Liste dann nur einmal im Speicher liegt?

Nein. Jede ComboBox muss/wird eine eigene Liste im Speicher halten. Das obige Konstrukt greift auf das Property Items zu und in der Setter-Methode wird die Stringliste kopiert.

Quake 23. Mär 2006 07:07

Re: TStrings Speicher
 
Wie kann ich das dann anstellen, dass die Liste nur einmal im Speicher gehalten wird? Irgendwie nur einen Pointer zuweisen?

xaromz 23. Mär 2006 07:14

Re: TStrings Speicher
 
Hallo,
Zitat:

Zitat von Quake
Wie kann ich das dann anstellen, dass die Liste nur einmal im Speicher gehalten wird? Irgendwie nur einen Pointer zuweisen?

Da wirst Du keinen Erfolg haben. Die Controls werden immer eigene Listen haben.

Gruß
xaromz

Bernhard Geyer 23. Mär 2006 07:15

Re: TStrings Speicher
 
Zitat:

Zitat von Quake
Wie kann ich das dann anstellen, dass die Liste nur einmal im Speicher gehalten wird? Irgendwie nur einen Pointer zuweisen?

Geht nicht, solange du die Default-ComboBox verwendest. Was würde wohl passieren wenn Du ComboBox1 freigeben würde? ComboBox1 würde seine eigene Liste freigeben und beim nächsten Zugriff von ComboBox2 würde es krachen da ja ComboBox2 versucht auf die freigegeben Liste zuzugreifen.

Was stört dich daran ein paar Zeilen Synchronisationscode zu schreiben? Du könntest Versuchen per Ownerdraw den Inhalt der einen ComboBox in der anderen zu zeichen, aber ob das einfacher ist?

Quake 23. Mär 2006 07:23

Re: TStrings Speicher
 
Das was mich stört ist die Speicherplatzverschwendung.

Luckie 23. Mär 2006 07:28

Re: TStrings Speicher
 
Also das was du da mehr an Speicher brauchst, ist im Vergleich zu deiner restlichen Anwendung wohl vernachlässigbar.

Quake 23. Mär 2006 07:39

Re: TStrings Speicher
 
Du weist ja nicht wie groß meine Stringliste ist :wink: . Sie kann bei mir schon ein paar 1000 Einträge haben.

xaromz 23. Mär 2006 07:49

Re: TStrings Speicher
 
Hallo,
Zitat:

Zitat von Quake
Du weist ja nicht wie groß meine Stringliste ist :wink: . Sie kann bei mir schon ein paar 1000 Einträge haben.

Nun ja. Bei 5000 Strings @ 20 Zeichen (plus 4 Byte Größe) sind das gerade einmal 120.000 Bytes (5000 * (20 + 4)), sprich 117 KB. Das sollte zu verschmerzen sein.

Gruß
xaromz

Quake 23. Mär 2006 07:57

Re: TStrings Speicher
 
Naja, bei 1GB Arbeitsspeicher wird es wenig ins Gewicht fallen. Aber wenn alle Programme so programmiert sind ist das schon schlecht. Aber gut, ich will hier keine Grundsatzdiskusion anfangen. Ich werd es dann wohl so machen müssen.

Vielen Dank an alle :thumb:
Martin


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 Uhr.
Seite 1 von 3  1 23      

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