Entwickler-Ecke

Andere .NET-Sprachen - Garbage Collector in Delphi 2005?


winx - Mo 29.08.05 15:01
Titel: Garbage Collector in Delphi 2005?
Hi,

wenn man in D2005 Anwendungen schreibt, müsste es doch dafür einen Garbage Collector geben oder?

Ist der nur bei .Net Projekten oder aber auch bei Win-32 Projekten dabei???

Danke,
winx


Moderiert von user profile iconChristian S.: Topic aus Sonstiges verschoben am Mo 29.08.2005 um 15:47


Christian S. - Mo 29.08.05 15:15

Hallo!

Die GC ist Teil des .NET Frameworks und nicht Teil von Delphi 2005 ansich. Daher gibt es ihn auch nur in .NET-Anwendungen.

Grüße
Christian


winx - Mo 29.08.05 15:29

und wie gut oder schlecht funktioniert dieser???


Christian S. - Mo 29.08.05 15:50

Hallo!

Hm, kann ich nicht so beurteilen. Die Programme, die ich bisher in .NET geschrieben habe, waren alle nicht so speicherintensiv, dass ich da Erfahungen mit sammeln konnte. :nixweiss:

Und da man unter .NET sowieso keine andere Wahl hat, als damit zu leben, habe ich auch nicht weiter nachgeforscht ;-) Allerdings genieße ich es, mich nicht mehr ums Freigeben von Speicher kümmern zu müssen. Ein Blich auf meinen Schreibtisch zeigt, dass ich es allgemein nicht so mit dem Aufäumen habe ;-)

Grüße
Christian


Marauder - Mo 29.08.05 21:13

Die Garbage Collection funktioniert erstaunlich gut, auch bei speichermordenden
Anwendungen. Wenn du es aber eilig hast und extra-Speicher brauchst mach es von Hand:


Delphi-Quelltext
1:
2:
3:
4:
procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs);
begin
  gc.Collect;
end;


Das ist auch interessant...

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TWinForm.Button2_Click(sender: System.Object; e: System.EventArgs);
var aString : array of String;
    a : Integer;
begin
  Messagebox.Show ( 'Schätzwert für die reservierte Anzahl von Bytes momentan : ' + gc.GetTotalMemory(false).toString);
  setLength (aString,100);
  for a := 1 to 99 do
    begin
        aString [a] := 'Stringwert '+ a.ToString;
    end;
  Messagebox.Show ( 'Schätzwert für die reservierte Anzahl von Bytes nach Arraybefüllung : ' + gc.GetTotalMemory(false).toString);
  gc.Collect;
  Messagebox.Show ( 'Schätzwert für die reservierte Anzahl von Bytes nach GC.Collect : ' + gc.GetTotalMemory(false).toString);
end;


Das und noch ein paar mehr Beispiele gibt's ab Oktober in meinem Buch 'Delphi goes .NET' :wink:
(Falls ich's vor meinem Urlaub noch fertig bekomme... die Chancen stehen gut... :D
wenn nicht, zieht mir der Verlag das Fell über die Ohren...)