AGB  ·  Datenschutz  ·  Impressum  







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

Speicher freigeben

Ein Thema von texmurphy901 · begonnen am 24. Nov 2008 · letzter Beitrag vom 24. Nov 2008
Antwort Antwort
texmurphy901

Registriert seit: 8. Nov 2006
35 Beiträge
 
#1

Speicher freigeben

  Alt 24. Nov 2008, 11:55
Hallo allerseits,

habe da ein kleines Problem: Ich lasse mir in meinem Programm zur Laufzeit PDF-Dokumente anzeigen. Dazu habe ich mir die Komponente von Gnostice gekauft, das aber nur am Rande.
Jedenfalls habe ich ein (fast) leeres Fenster, welches erst bei Bedarf zur Laufzeit die PDF-Komponenten erzeugt und die Datei anzeigt. Beim schließen des Fensters, gebe ich die Instanzen wieder frei. Dummerweise schlägt sich das nicht im Speicherverbauch meiner Anwendung nieder. Wenn ich mit dem Task manager kontrolliere, so steigt der Speicher mit jedem Aufruf des Fensters an, wird aber beim schließen nicht wieder kleiner.
Da es sich nicht gerade um kleine Mengen handelt (>500KByte) ist also irgendwann Sense auf kleineren Rechnern und das wollte ich gerade mit dem freigeben der Ressourcen ja verhindern.


Hat jemand eine Idee?

Hier nun ein paar Code-Schnippsel:


Erzeugen der Instanzen. Das geschieht in einer eigenen Prozedur __init, die explizit gestartet werden muss, die aber nicht automatisch bei onCreate oder onShow aufgerufen wird. Damit bin ich mir sicher, dass ich nicht nebenbei noch ein paar andere Instanzen erzeuge. Hier der Code:
Delphi-Quellcode:
  procedure Tviewer.__init;
begin
  //Fenstergröße einstellen
  width:=800;
  height:=780;
  PDFViewer:=TgtPDFViewer.Create(self);
  with pdfviewer do begin
    Parent:=Viewer;
    Width:=750;
    Height:=700;
    Top:=50;
  end;

  PDFDoc:=tgtPDFDocument.Create(self);

  pdfviewer.PDFDocument := PDFDoc;
end;
...und die Ressourcenfreigabe bei onClose des Form:
Delphi-Quellcode:
procedure Tviewer.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   PDFDoc.free;
   PDFViewer.free;
end;
Ein Ersetzen von Free durch Destroy hilf nebenbei gesagt auch nicht, falls jemand mit dem Tip kommen sollte
Ich danke schonmal allen Helfenden!!!
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#2

Re: Speicher freigeben

  Alt 24. Nov 2008, 12:00
Wird denn der Speicher freigegeben, wenn die Anwendung komplett geschlossen wird?
In dem Fall würde ich die einmal erzeugte PDF-Komponente nicht wieder freigeben, sondern wieder verwenden.

Sherlock
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Speicher freigeben

  Alt 24. Nov 2008, 12:02
Deine explizite Freigabe ist unnötig da du beim konstruktur das Formular als Owner angegebn hast.

Häng mal FastMM rein. Auch Inder produzieren teilweise Speicherlücken (bzw. schlechten Code).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
texmurphy901

Registriert seit: 8. Nov 2006
35 Beiträge
 
#4

Re: Speicher freigeben

  Alt 24. Nov 2008, 12:08
Oh...das ging ja schnell.
zu den beiden Antworten: Ja beim Beenden wird der Speicher wieder frei gegeben.

Und die Bemerkung mit dem Speicherloch ist ebenfalls zutreffen: Bei jedem Blättern im Dokument geht weiter Speicher flöten, der dann ebenfalls nicht freigegeben wird.
Dieses Problem habe ich versucht mit meiner geschilderten Methode zu umgehen, quasi als Workaround bis der Hersteller sich ENDLICH mal meldet.

Aber es muss doch einen Weg geben, dass ich den Speicher wieder frei bekomme?
  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 14:07 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