Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Sämtlichen Speicher freigeben? (https://www.delphipraxis.net/103588-saemtlichen-speicher-freigeben.html)

MCXSC 18. Nov 2007 02:18


Sämtlichen Speicher freigeben?
 
Hallo!

Eine kleine (dämliche :D) Frage: Gibt es irgendetwas (Codezeile, Funktion, Unit/Kompo), die sämtlichen geschriebenen Speicher wieder in Windows löscht/freigibt (z.B. bei Programmende)?

Danke im vorraus,
MCXSC

turboPASCAL 18. Nov 2007 04:29

Re: Sämtlichen Speicher freigeben?
 
Nein, eine allgemeine Lösung dafür gibt es nicht. Du musst du schon selbst dafür sorgen
das der Speicher den Du belegst auch wieder frei gibst.

Was für ein Problem gibt es denn genau ?

Robert Marquardt 18. Nov 2007 05:16

Re: Sämtlichen Speicher freigeben?
 
Wenn sich dein Programm beendet, dann wird saemtlicher Speicher von alleine freigegeben.

gsh 18. Nov 2007 10:26

Re: Sämtlichen Speicher freigeben?
 
Zitat:

Zitat von Robert Marquardt
Wenn sich dein Programm beendet, dann wird saemtlicher Speicher von alleine freigegeben.

ja des schon aber sowas ist eigentlich sehr unschön

@MCXSC: du solltest immer schauen des wenn du was freigibst des du es auch wieder freigibst. Sonst gibt es gleich mal ein speicherleak.

Am besten du fügst an deine Projekt immer folgende Codezeile ein:
Delphi-Quellcode:
begin
  ReportMemoryLeaksOnShutdown := true; //<- diese Zeile hier
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Dann siehst du gleich wenn du ein Speicherleak gemacht hast

Bernhard Geyer 18. Nov 2007 10:29

Re: Sämtlichen Speicher freigeben?
 
Zitat:

Zitat von gsh
Zitat:

Zitat von Robert Marquardt
Wenn sich dein Programm beendet, dann wird saemtlicher Speicher von alleine freigegeben.

ja des schon aber sowas ist eigentlich sehr unschön

Ist ja nur der Notanker von Windows damit nicht wie unter Win16 einzelnen Prozesse einfach Windows vollmüllen können.

Und im Release-Build will ich auch den Endkunden nicht mit Fehlerreports belästigen.

MCXSC 18. Nov 2007 12:28

Re: Sämtlichen Speicher freigeben?
 
Zitat:

Zitat von gsh
@MCXSC: du solltest immer schauen des wenn du was freigibst des du es auch wieder freigibst. Sonst gibt es gleich mal ein speicherleak.

Am besten du fügst an deine Projekt immer folgende Codezeile ein:
Delphi-Quellcode:
begin
  ReportMemoryLeaksOnShutdown := true; //<- diese Zeile hier
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Da bekomm ich die Meldung "Undefinierter Bezeichner".

Kann ich das denn auch noch nach Beenden sehen? Weil ich habe das Problem, dass Windows immer nach Schließen meines Programmes ausschlägt und ich denke mal, es hängt irgendwie mit dem VST zusammen...

Axxus 18. Nov 2007 12:29

Re: Sämtlichen Speicher freigeben?
 
Bei .Net gibt es die sog. Garbage Collection, die meines Wissens nach den gesammten Arbeitsspeicher generell "aufräumt". Damit ist gemeint das sie Automatisch erkennt welche resourcen nicht mehr gebraucht werden und diese dann aus dem Arbeitsspeicer löscht. Sie erkennt sogar wenn 2 Prozesse nur noch gegenseitig aufeinander zugreifen.

Wie genau man die impleniert weiß ich nicht müsstest du mal googeln, allerdings solltest du mit dem einbau in dein Programm vorsichtig sein, da die Garbage Collection ziemlich viel Prozessorleistung in Anspruch nimmt...

Gruß

Axxus

MCXSC 18. Nov 2007 12:33

Re: Sämtlichen Speicher freigeben?
 
Zitat:

Zitat von Axxus
Bei .Net gibt es die sog. Garbage Collection

Geht sich aber ums Win.32^^

Bernhard Geyer 18. Nov 2007 12:49

Re: Sämtlichen Speicher freigeben?
 
Zitat:

Zitat von MCXSC
Da bekomm ich die Meldung "Undefinierter Bezeichner".

Der obige Code geht erst ab Delphi 2006, da dort FastMM verwendet wird. Für D7 mußt du dir FastMM4 von Sourceforge holen.[/quote]


Zitat:

Zitat von Axxus
Damit ist gemeint das sie Automatisch erkennt welche resourcen nicht mehr gebraucht werden und diese dann aus dem Arbeitsspeicer löscht.

Ressourcen wie GDI-Handles, File-Handles werden nicht freigegeben. So intelligent ist auch der .NET GC nicht.

Zitat:

Zitat von Axxus
Sie erkennt sogar wenn 2 Prozesse nur noch gegenseitig aufeinander zugreifen.

Wirklich? Ich konnte solche Fehlerfälle unter .NET 1.0 astrein provozieren.

Zitat:

Zitat von Axxus
Wie genau man die impleniert weiß ich nicht müsstest du mal googeln, allerdings solltest du mit dem einbau in dein Programm vorsichtig sein, da die Garbage Collection ziemlich viel Prozessorleistung in Anspruch nimmt...

"Einbauen" kann man sowas nicht. Entweder man hat mit Java oder .NET eine managed Umgebung und hat damit ohne wenn und aber einen GC oder man hat keinen.

DMW 18. Nov 2007 13:03

Re: Sämtlichen Speicher freigeben?
 
Zitat:

Zitat von Bernhard Geyer
"Einbauen" kann man sowas nicht.

Doch, das kann man, in C++ z.B. den hier.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:46 Uhr.
Seite 1 von 2  1 2      

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