Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Delphi 5 und Garbage Collection? (https://www.delphipraxis.net/28324-delphi-5-und-garbage-collection.html)

Icemanemp 23. Aug 2004 10:36


Delphi 5 und Garbage Collection?
 
Hi,

Ich hab versucht das Thema über die Suche zu finden, aber da hat scheinbar noch keiner danach gefragt?!
Ich war zufällig bei einem Projekt beschäftigt und musste ein paar Projektoptionen (Compiler) verändern. Dann bin ich auf die Hilfe um über die verfügbaren Optionen mehr zu erfahren. Dort ist mir folgender Eintrag aufgefallen:

Zitat:

Huge-Strings

Ist diese Option aktiviert, entspricht das Schlüsselwort string dem neuen Typ AnsiString, der von der Garbage Collection berücksichtigt wird. Andernfalls definiert string den Typ ShortString. Diese Option entspricht dem Schalter {$H}.
Ich dachte erst "He, Delphi 5 und Garbage Collection? Ich dachte das wäre ein Feature von .Net und Java?!", aber nun wollte ich mehr wissen und deshalb frage ich hier nach. Kann es sein das Delphi einfach Datentypen über diesen Garbage Collector "zerstört" und erst Objekte ab .Net mit dem Garbage Collector zerstört werden oder ist das beschrieben Garbage Collection hier etwas ganz anderes?

Danke für eure Hilfe!

dizzy 23. Aug 2004 10:38

Re: Delphi 5 und Garbage Collection?
 
Arrays und Records werden für dich von Delphi verwaltet. Objekte muss man selber behandeln. (Und Strings sind Arrays.)

gruss,
dizzy

w3seek 23. Aug 2004 13:04

Re: Delphi 5 und Garbage Collection?
 
Ich halte von garbage collections generell ueberhaupt nichts, das regt meiner meinung nach nur zum schlechten programmieren an, anstatt die qualitaet des codes zu verbessern. Wuerde daher grundsaetzlich davon abraten, selbst wenn z.b. .NET solche "features" bieten.

nailor 23. Aug 2004 13:56

Re: Delphi 5 und Garbage Collection?
 
ja klar. und jeden integer den du brauchst auch wieder einzeln freigeben...

da sag ich: nein danke.

dizzy 23. Aug 2004 13:59

Re: Delphi 5 und Garbage Collection?
 
Problem 1) Bei .NET kommst du einfach nicht drum herum. Das ist drin, und ende ;)

Problem 2) Die wenigsten Programmierer kommerzieller Software arbeiten 100% sauber. Können sie oft auch garnicht, da der Zeitdruck immens ist. Somit ist Garbabecollection allein schon ein wirtschaftlicher Vorteil!

Ich mag's ehrlich gesagt auch nicht. Ich weiss lieber direkt wann und wo welches Objekt nicht mehr existiert. Auch die Idee der Zwischenkompilate missfällt mir irgendwie, auch wenn .NET ja im Gegensatz zu Java noch sehr performaten Code erzeugt. Aber man verliert einfach die Kontrolle im Detail :?
Aber es spricht wohl scheinbar zu viel für diese Systeme, als dass mein "Unwohlsein" dabei irgendetwas an dieser Richtung ändern könnte :stupid:

\\edit: @nailor: Da finde ich die Mischung in Delphi gerade richtig! Einfach Typen automatisch, aber Objekte manuell :thuimb:

Vjay 23. Aug 2004 14:01

Re: Delphi 5 und Garbage Collection?
 
Zitat:

Zitat von nailor
ja klar. und jeden integer den du brauchst auch wieder einzeln freigeben...

da sag ich: nein danke.

Ihr redet hier von unterschiedlichen Dingen. Wenn du in deinem proceduren - var - Block einen Integer allocierst wird dieser danach wieder freigegeben. Das ist aber keine Garbage-Collection.

Garbage-Collection wie sie .net oder Java implementiert haben, ist das entfernen von nicht mehr verwendeten Variablen(Speicherbereichen).
Dies wird z.B. von einem Extrathread durchgeführt der die ganze Zeit läuft und nichts anderes tut als nach Speicher zu suchen, auf den keine Referenz mehr vorhanden ist.

Kostet CPU-Time und fördert einen schlechten Programmierstil, halte ich auch nicht viel von.

Phoenix 23. Aug 2004 14:04

Re: Delphi 5 und Garbage Collection?
 
Zitat:

Zitat von dizzy
Problem 1) Bei .NET kommst du einfach nicht drum herum. Das ist drin, und ende ;)

Erm.. Du kannst im Dispose Methode eines .NET Objektes selbstverständlich alles selber Freigeben. Das ist u.U. sogar wichtig, wenn es irgendwo auf die Reihenfolge ankommt.

dizzy 23. Aug 2004 14:20

Re: Delphi 5 und Garbage Collection?
 
Zitat:

Zitat von Phoenix
Zitat:

Zitat von dizzy
Problem 1) Bei .NET kommst du einfach nicht drum herum. Das ist drin, und ende ;)

Erm.. Du kannst im Dispose Methode eines .NET Objektes selbstverständlich alles selber Freigeben. Das ist u.U. sogar wichtig, wenn es irgendwo auf die Reihenfolge ankommt.

Was echt? Ich hab mit .NET bzw. D8 noch nicht gearbeitet, nur drüber gelesen. Und bisher klang das so wie es bei Java auch gemacht wird. Einfach den Pointer auf NULL bzw. NIL setzen, und der GC gibt dann irgendwann wenn's passt den Speicher frei. Aber wenn .NET das auch manuell zulässt, dann :thuimb:

Phoenix 23. Aug 2004 14:24

Re: Delphi 5 und Garbage Collection?
 
Jo, das geht freilich auch.

Aber wenn Du wie gesagt u.U. ein Objekt zwingen vor einem anderen freigeben muss (z.B. Cursor auf eine Datenbanktabelle vor der Datenbankconnection, da sich diese sonst nicht schliessen lässt etc.) dann kannst Du wie gesagt im Dispose diese Dinger eben auch in der richtigen Reihenfolge explizit zerstören lassen.

Best of both worlds sozusagen :)

Icemanemp 23. Aug 2004 15:01

Re: Delphi 5 und Garbage Collection?
 
Also wie von mir vermutet ist die Antwort auf meine Frage jetzt:

"Einfache Datentypen verwaltet Delphi und Objekte muss ich als Programmierer selbst verwalten!" ?
Also wird das Garbage Collection bei Delphi 5-7 und ältere Versionen natürlich auch nur auf einfache Datentypen angewendet. (Klar ist es ja das erst mit Delphi 8 und .Net Garbage Collection bei Objekte funktionierte). Ist so die Antwort?


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:30 Uhr.
Seite 1 von 2  1 2      

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