Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi garbage collection bei widestrings? (https://www.delphipraxis.net/79735-garbage-collection-bei-widestrings.html)

sancho1980 27. Okt 2006 09:58


garbage collection bei widestrings?
 
hallo mal eine frage:
wisst ihr ob es bei widestring garbage collection gibt, also werden nicht mehr referenzierte widestrings automatisch freigegeben?

danke,

martin

sakura 27. Okt 2006 10:15

Re: garbage collection bei widestrings?
 
Also generell gibt es unter Delphi Win32 gar keine Garbage Collection. Aber der Speicher für (Wide-)Strings wird automatisch wieder freigegeben, ja.

...:cat:...

Elvis 27. Okt 2006 10:20

Re: garbage collection bei widestrings?
 
Zitat:

Zitat von sakura
Also generell gibt es unter Delphi Win32 gar keine Garbage Collection. Aber der Speicher für (Wide-)Strings wird automatisch wieder freigegeben, ja.

Merkt man auch schön wenn man beim Debuggen eine WideString-lastige App abbricht zurück in die IDE wechselt... :mrgreen:

Nett ist natürlich einen "richtigen" String typen zu haben, mit dem auch andere Sprachen etwas anfangen können. :)

sancho1980 27. Okt 2006 10:22

Re: garbage collection bei widestrings?
 
ok
das problem ist, dass ich in meiner anwendung einen widestring nach und nach zusammenbaue, also nach dem prinzip:

widestringvar := '';
while (irgendwas)
begin
widestringvar := widestringvar + irgendwasneues;
..noch anderer code
end;

da wird ja soviel ich weiß bei jedem schleifendurchlauf ein neuer string erzeugt und ich hatte mir so überlegt was denn dann mit den ganzen strings wird, die dadurch überflüssig werden (vom vorherigen schleifendurchlauf...

geht das aber vielleicht auch eleganter, dass also "irgendwasneues" einfach an den alten string angehängt wird?



danke,

martin

xZise 27. Okt 2006 11:18

Re: garbage collection bei widestrings?
 
Zitat:

Zitat von sancho1980
Delphi-Quellcode:
widestringvar := '';
while (irgendwas)
  begin
    widestringvar := widestringvar + irgendwasneues;
    ..noch anderer code
  end;

1. Ist ein Widestring (swoeit ich weiß primitiv) D.h.:
  • Alles was du nicht instanzierst, brauchst du auch nicht freigeben:
    Delphi-Quellcode:
    procedure doSomething(name : string);
    var
      myStr : WideString;
    begin
      myStr := 'Hallo,';
      myStr := myStr + #10#13 + 'heißt du ' + name + '?';
      Showmessage(myStr);
    end;
    Hier ist nirgends ein
    Delphi-Quellcode:
    VarName := Vartyp.Create
    also brauchst du kein
    Delphi-Quellcode:
    VarName.Free
2. Wird da nichts neues erzeugt. Es wurd nur widestringvar etwas hinzugefügt...
3. Garbage Collection

PS: Um Delphi Code immer ein
Code:
[delphi]MyDelphicode[/delphi]
machen ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 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