AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sämtlichen Speicher freigeben?

Ein Thema von MCXSC · begonnen am 18. Nov 2007 · letzter Beitrag vom 23. Nov 2007
Antwort Antwort
Seite 1 von 2  1 2      
MCXSC
(Gast)

n/a Beiträge
 
#1

Sämtlichen Speicher freigeben?

  Alt 18. Nov 2007, 02:18
Hallo!

Eine kleine (dämliche ) 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
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: Sämtlichen Speicher freigeben?

  Alt 18. Nov 2007, 04:29
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 ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#3

Re: Sämtlichen Speicher freigeben?

  Alt 18. Nov 2007, 05:16
Wenn sich dein Programm beendet, dann wird saemtlicher Speicher von alleine freigegeben.
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#4

Re: Sämtlichen Speicher freigeben?

  Alt 18. Nov 2007, 10:26
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
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Sämtlichen Speicher freigeben?

  Alt 18. Nov 2007, 10:29
Zitat von gsh:
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
MCXSC
(Gast)

n/a Beiträge
 
#6

Re: Sämtlichen Speicher freigeben?

  Alt 18. Nov 2007, 12:28
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...
  Mit Zitat antworten Zitat
Axxus

Registriert seit: 3. Okt 2006
212 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Sämtlichen Speicher freigeben?

  Alt 18. Nov 2007, 12:29
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
  Mit Zitat antworten Zitat
MCXSC
(Gast)

n/a Beiträge
 
#8

Re: Sämtlichen Speicher freigeben?

  Alt 18. Nov 2007, 12:33
Zitat von Axxus:
Bei .Net gibt es die sog. Garbage Collection
Geht sich aber ums Win.32^^
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Sämtlichen Speicher freigeben?

  Alt 18. Nov 2007, 12:49
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 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 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 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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#10

Re: Sämtlichen Speicher freigeben?

  Alt 18. Nov 2007, 13:03
Zitat von Bernhard Geyer:
"Einbauen" kann man sowas nicht.
Doch, das kann man, in C++ z.B. den hier.
Moritz
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:47 Uhr.
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