AGB  ·  Datenschutz  ·  Impressum  







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

Arbeitsspeicher läuft über - wie leeren

Ein Thema von Ykcim · begonnen am 19. Aug 2010 · letzter Beitrag vom 20. Aug 2010
Antwort Antwort
Seite 1 von 2  1 2      
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
856 Beiträge
 
Delphi 12 Athens
 
#1

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 19. Aug 2010, 12:59
Das probiere ich mal aus.
Wenn ich mein Programm beende, dann wird der ganze Speicher wieder freigegeben, wie ich im Taskmanager verfolgen kann....

Gruß

Patrick
Patrick
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 19. Aug 2010, 13:16
....Wenn ich mein Programm beende, dann wird der ganze Speicher wieder freigegeben, wie ich im Taskmanager verfolgen kann....
Stimmt so nicht! Wenn ich mich recht entsinne werden Dynamische Arrays anders behandelt,(pointer). Auch wenn Du Dein Programm beendest,(und es sieht so aus das alles Frei gegeben wird), ist der Speicher noch reserviert! Darum auch der Hinweis, beim Beenden Deines Progs alles explizit Frei zugegeben!

Gruss alfold
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 19. Aug 2010, 14:19
Auch wenn Du Dein Programm beendest,(und es sieht so aus das alles Frei gegeben wird), ist der Speicher noch reserviert!
Das ist barer Unsinn. Wo hast du das her? Wenn der Prozess beendet wird, dann wird der Adressbereich des Prozesses komplett wieder frei gegeben und steht anderen Programmen zur Verfügung. Und es spielt keine Rolle, ob du den von dir reservierten Speicher frei gibst oder nicht. Beim beenden räumt Windows hinter dir auf.

Aber nochmal zum Code von Ykcim von der ersten oder zweiten Seite. Wie viele Zeilen hat die Prozedur? Tausend? Da blickt doch kein Schwein mehr durch. Zerleg das ganze mal in kleinere, übersichtliche Prozeduren. Dann siehst du wahrscheinlich auch, wo du unnötig und doppelt Speicher reservierst.
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie (19. Aug 2010 um 14:23 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 19. Aug 2010, 14:23
[...]Beim beenden räumt Windows hinter dir auf.
Ist das nicht eher so, dass Windows gar nicht mehr weiß, dass in den RAM Zellen Sowieso Werte des Prozesses Soundso stehen

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 19. Aug 2010, 14:25
Keine Ahnung, was Windows weiß. Jedenfalls steht der Adressraum eines nicht mehr existierenden, also beendenten Prozesses, wieder zur Verfügung. Oder hast du schon mal im Taskmanger belegten Speicher gesehen, der zu keinem Prozess mehr gehört?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#6

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 20. Aug 2010, 02:46
Also ich habe jetzt noch Augenschmerzen vom Lesen des Sourcecode von Beitrag #7.
Bitte verwende doch eigene Prozeduren und Funktionen - dieser Spaghetticode ist ja nicht zum aushalten.
Auch wenn ein bestimmter Codeabschnitt nur einmal verwendet wird lohnt es sich doch diesen in eine Prozedure oder Funktion (genauer gesagt eine Methode) zu verpacken.
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 20. Aug 2010, 11:54
Jo, soll ja keine grundsatz Diskusion werden
mh... War mir nicht so, das Windows erst den Speicher "richtig" freigibt ..... ?
Ich habe es wahrscheinlich verwechselt mit der Prefetch Funktion von Windows, habt also Nachsicht mit mir
Alles ander hatte ja @Lucki schon in einem Satz gesagt!

Sonst hat dieses Thema nichts mehr mit den Topic zu tun!

Gruss alfold
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 19. Aug 2010, 15:07
Auch wenn Du Dein Programm beendest,(und es sieht so aus das alles Frei gegeben wird), ist der Speicher noch reserviert!
Das ist barer Unsinn. Wo hast du das her? Wenn der Prozess beendet wird, dann wird der Adressbereich des Prozesses komplett wieder frei gegeben und steht anderen Programmen zur Verfügung. Und es spielt keine Rolle, ob du den von dir reservierten Speicher frei gibst oder nicht. Beim beenden räumt Windows hinter dir auf.
mh... War mir nicht so, das Windows erst den Speicher "richtig" freigibt wenn ein neuer Prozess speicher anfordert!? Sollte also mein Prog nach beenden noch mal gestartet werden, erspart sich Windows ne neue zuordnung von Speicher!? (schnellerer Programmstart) Oder verwechsle ich das jetzt mit was anderem

Aber wird nicht immer expliziet darauf hingewiesen, das ich selbst dafür verantwortlich bin, egal ob es ein Record, Objekt oder ein dynamisches Array ist, am Ende dafür zu sorgen, das es auch wieder frei gegeben wird? Dann kann man sich ja am Ende( das aufräumen sparen)
Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
//freigeben von objekte
//dyn. Arrays
//records usw.
end
und ich stecke da immer so viel Arbeit rein
gruss alfold

Geändert von alfold (19. Aug 2010 um 15:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 19. Aug 2010, 15:48
mh... War mir nicht so, das Windows erst den Speicher "richtig" freigibt wenn ein neuer Prozess speicher anfordert!? Sollte also mein Prog nach beenden noch mal gestartet werden, erspart sich Windows ne neue zuordnung von Speicher!? (schnellerer Programmstart) Oder verwechsle ich das jetzt mit was anderem
Nein. Wird ein Prozess beendet, egal ob regulär oder durch den Taskmanager, wird der Adressraum wieder frei gegeben.

Zitat:
Aber wird nicht immer expliziet darauf hingewiesen, das ich selbst dafür verantwortlich bin, egal ob es ein Record, Objekt oder ein dynamisches Array ist, am Ende dafür zu sorgen, das es auch wieder frei gegeben wird?
Ja bist du, innerhalb des Programmes, also wenn dein Programm noch läuft, sonst müllst du dir den Speicher voll.

Zitat:
Dann kann man sich ja am Ende( das aufräumen sparen)
Könnte man. Ist aber kein sauberer Stil.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#10

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 20. Aug 2010, 00:20
Moin,
Auch wenn Du Dein Programm beendest,(und es sieht so aus das alles Frei gegeben wird), ist der Speicher noch reserviert!
Das ist barer Unsinn. Wo hast du das her? Wenn der Prozess beendet wird, dann wird der Adressbereich des Prozesses komplett wieder frei gegeben und steht anderen Programmen zur Verfügung. Und es spielt keine Rolle, ob du den von dir reservierten Speicher frei gibst oder nicht. Beim beenden räumt Windows hinter dir auf.
mh... War mir nicht so, das Windows erst den Speicher "richtig" freigibt wenn ein neuer Prozess speicher anfordert!? Sollte also mein Prog nach beenden noch mal gestartet werden, erspart sich Windows ne neue zuordnung von Speicher!? (schnellerer Programmstart) Oder verwechsle ich das jetzt mit was anderem[...]
Unwahrscheinlich. Weil wenn ich z.B. Notepad beende und dann eine neue Instanz starte, mache ich ja da nicht wieder weiter. Und um herauszufinden, welche Daten weiter genutzt werden könnten, ist eh alles wieder geladen. Ich glaube du meinst eher den Cache in der Festplatte. Aber da hat da Betriebssystem nur entfernt mit zu tun und im idealfall gar nicht.

[...]Aber wird nicht immer expliziet darauf hingewiesen, das ich selbst dafür verantwortlich bin, egal ob es ein Record, Objekt oder ein dynamisches Array ist, am Ende dafür zu sorgen, das es auch wieder frei gegeben wird? Dann kann man sich ja am Ende( das aufräumen sparen)[...]
Kann sein, dass ich mist erzähle, aber normalerweise speichert Windows ab: Der Prozess X hat die virtuelle Adresse V die auf die physikalische Adresse P abgebildet wird. Das heißt, wenn der Prozess X den Wert aus der Adresse V haben will, dann wird die Speicherzelle P aus den RAM oder Swap gelesen.
Nun ist das beim Programmende doch eigentlich so, dass er einfach die Tabelle für den Prozess X verwirft, und die Adresse P nicht mehr benutzt wird. Das da vorher Daten drin waren kann (i.d.R.) egal sein. Notfalls musst du am Anfang den Wert fest definieren.

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  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 14:34 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