Autor Beitrag
Zimond
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49



BeitragVerfasst: Fr 16.04.04 18:25 
Zwecks Optimierung wollte ich in meinem Projekt alle Variablen die bestimmte Werte nicht überschreiten durch kleinere Typen ersetzen, sprich alle Strings die definitiv nicht über 255 Zeichen durch Shortstrings erstetzen.

Anschließend war die Speicherverbrauch Anzeige im Task Manager aber horend höher.

Ich habs an einem leeren Projekt getestet mit
var Zeilen : array [1..100000of string;

und dann im formcreate auf nichts gesetzt :

ausblenden Delphi-Quelltext
1:
2:
for a := 1 to 100000 do 
 zeilen[a] := '';


Mit Strings ist sind etwa 3 Megabyte speicher in Besitzt, aber mit Shortstrings ganze 58 Megabyte.

Vermute ich richtig das Shortstrings unabhängig ihres Inhalts IMMER 256 Bytes Speicher fressen während normale Strings nur so viele Bytes Speicher an sich reissen wie tatsächlich in ihnen steht? Wenn ja macht die Verwendung von shortstrings zur Speicheroptimierung ja gar keinen Sinn.

Moderiert von user profile iconMotzi: Code- durch Delphi-Tags ersetzt.
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Fr 16.04.04 21:25 
Zimond hat folgendes geschrieben:
Vermute ich richtig das Shortstrings unabhängig ihres Inhalts IMMER 256 Bytes Speicher fressen während normale Strings nur so viele Bytes Speicher an sich reissen wie tatsächlich in ihnen steht?
Jupp, du vermutest richtig.

Zimond hat folgendes geschrieben:
Wenn ja macht die Verwendung von shortstrings zur Speicheroptimierung ja gar keinen Sinn.
So ist es.

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
Brainiac
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 17.04.04 11:11 
Jo Shortstrings machen höchstens in manchen Records Sinn, wenn du sie abspeichern willst, da aber auch besser als z.B. String[5] wenn du schon genau weißt, dass dein String immer höchstens 5 Zeichen haben wird. ShortString an sich, also mit 255 Zeichen ist nicht so praktisch.
Auch bei der Übergabe an Prozeduren sind LongStrings besser, weil sie nur ein Pointer sind und jede beliebige Länge annehmen können.

Positiv könnte man noch anführen, dass sie die CPU bei manchen komplizierten Operationen etwas weniger belasten. Das haben wir hier allerdings vor nicht allzu langer Zeit schon mal durchdiskutiert -> Suchfunktion.
bms
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 735

Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
BeitragVerfasst: Sa 17.04.04 11:52 
Die Sache ist eher geschichtlich zu sehen. Früher, z.B. noch in Delphi1, war der String ein 256 Zeichen-String. Wenn man was längeres haben wollte, dann mußte man was anderes als den normalen String nehmen. Seit Delphi 2 ist es anders. Das was früher String war ist jetzt Shortstrings, das was früher lange Strings waren (ich glaube das waren AnsiString's) sind jetzt die normalen Strings. Wenn Windows auf 64Bit schwengt, dann werden Strings noch länger als die heutigen 2GigaByte.

Aber um nochmal auf dein Problem zurückzukommen: Heute macht es anscheinend kaum noch einer, aber es ist durchaus möglich einem String eine Länge zuzuweisen

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
  S: String[2];
begin
  S := 'Abc';
  ShowMessage(S);
end;


Das Ergebnis wird Ab sein.

Wenn du also keine 256 Zeichen brauchst, dann kannst du auch nur zwei Zeichen nehmen.

_________________
VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >:(
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Sa 17.04.04 15:04 
An dieser Stelle werd ich einfach mal auf mein String-Tutorial verweisen, in dem genau diese Sachen alle genau abgehandelt werde..! :)
www.manuel-poeter.de 8)

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!