AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Fenster/Formular aus Speicher entfernen
Thema durchsuchen
Ansicht
Themen-Optionen

Fenster/Formular aus Speicher entfernen

Ein Thema von amigage · begonnen am 19. Apr 2006 · letzter Beitrag vom 19. Apr 2006
Antwort Antwort
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
270 Beiträge
 
Delphi 11 Alexandria
 
#1

Fenster/Formular aus Speicher entfernen

  Alt 19. Apr 2006, 08:46
Hallo Delphi-Fans,

ich habe eine Frage zur Speicherverwaltung und damit zum ordentlichen Freigeben von Speicher.

Folgendes Problem: Ich öffne von einem Hauptformular aus ein zweites Formular/Fenster.
In den Projektoptionen liegt das Formular nicht unter den automatisch erzeugten Formularen.

Also öffne und schließe ich es mit:

Delphi-Quellcode:
EingabeDlg := TEingabeDlg.Create(Self);
If EingabeDlg.ShowModal = mrOK then
begin
 // .............
end;
EingabeDlg.Release;
FreeAndNil(EingabeDlg);
Nehme ich jetzt z.B. ein Speicherüberwachungstool, wie WinHex (http://www.x-ways.net/winhex/index-d.html) und lasse mir über das Menü EXTRAS - RAM ÖFFNEN den Gesamtspeicher meines Programms anzeigen, finde ich trotzdem noch die Eingabefelder und Labelbezeichner im Speicher!

Auch wenn ich in dem Formular Variablen mit Werten fülle, finde ich diese noch im Speicher.

Ist meine Routine nicht ganz in Ordnung?
Wie kann ich sicherstellen, dass der Speicher wirklich freigegeben wird?
Gibt es einen Trick oder eine Einstellung in den Delphi-Optionen?

Bin über jede Antwort dankbar.

Gruß
Amigage
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Fenster/Formular aus Speicher entfernen

  Alt 19. Apr 2006, 08:54
Der Delphi Speichermanager gibt nicht sofort den Speicher an Windows zurück, damit er ihn beim nächsten mal nicht neu anfordern muss, das spart Zeit. Der Delphi Speichermanager uist deswegen so ausgelegt, weil in der OOP Programmierung häufig belegt und wieder freigegeben werden, somit ist die Vorgehensweise des Speichermanagers performanter, als wenn er jedes mal den Speicher an Windows zurück geben und wieder neu anfordern würde.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
270 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Fenster/Formular aus Speicher entfernen

  Alt 19. Apr 2006, 09:44
Danke für die schnelle Antwort.

Bei datenkritischen Anwendungen ist das natürlich ein eklatanter Nachteil.
Gibt es wirklich keine Möglichkeit, die Speicherfreigabe zu erzwingen?

Gruß
Amigage
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: Fenster/Formular aus Speicher entfernen

  Alt 19. Apr 2006, 09:48
Hallo,

das Problem hier ist nicht die Speicherfreigabe. Selbst wenn Speicher freigegeben wird, wird dieser nicht "geleert", also z. B. mit Null gefüllt. Wenn Du Dir z. B. die Auslagerungsdatei einer (nicht laufenden) Windows-Installation im Hex-Editor ansiehst, wirst Du erstaunt sein, was da alles drinsteht.
Das Leeren des Speichers bringt ja normalerweise nichts und kostet nur Zeit. Du musst also vor dem Zerstören Deines Objekts (am Besten im Destructor) Deinen Daten selbst überschreiben (einen String auf '' setzten funktioniert übrigens nicht, ist ja nur ein Pointer). Aber selbst das ist keine Garantie, dass die Daten nicht auch noch in der Auslagerungsdatei rumfliegen.

Gruß
xaromz
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#5

Re: Fenster/Formular aus Speicher entfernen

  Alt 19. Apr 2006, 09:52
Entweder du schreibst dir selber einen MemoryManager, denn die meisten MMs gehen ähnlich vor.

Oder du wendest dich direkt an Windows und forderst dort Speicher an und gibst ihn wieder frei.
z.B. mit
> GlobalAlloc, GlobalReAlloc, GlobalFree
oder
> VirtualAlloc, VirtualFree

Was aber bei einem Fenster nicht gehen wird, da du dort ja nichts an den Aufrufen ändern kannst.

[add]
Zitat:
Aber selbst das ist keine Garantie, dass die Daten nicht auch noch in der Auslagerungsdatei rumfliegen.
Ist ja auch klar, denn der Speicherberaich wird ja vorm Ändern wieder vom Windows in den RAM geladen und dort geändert, also das was in der PageFile steht wird erst gelöscht, wenn mal wieder etwas anderes ausgelagert und an der selben Stelle abgespeichert wird.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:45 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