AGB  ·  Datenschutz  ·  Impressum  







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

Programm belegt immer mehr Speicher

Ein Thema von TheMiller · begonnen am 3. Jul 2007 · letzter Beitrag vom 9. Jul 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#11

Re: Programm belegt immer mehr Speicher

  Alt 4. Jul 2007, 14:21
Hm,

aber woher weiß ich, an welcher Stelle die AV auftritt? Er sagt ja, dass einige Lecks in der SysUtils sind. FastMM4 und der con CodeGear haben nichts gefunden.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: Programm belegt immer mehr Speicher

  Alt 4. Jul 2007, 14:50
Hallo

"
ich habe MemCheck eingebeunden. Er findet SpeicherLecks in FindUtils.pas und bricht dann mein ganzes Projekt ab. Ist das richtig? Es kommt eine AV, dann die Log-File von MemCheck und dann wird mein Programm beendet. Hier mal die Log:
"

Die Schutzverletzung musst du natürlich suchen,
also Debugger anwerfen und los!

Im Log steht SysUtils, nicht FindUtils (?)

Durch die AV wird das Programm beendet,
MemCheck zeigt dann die bisher gefundenen Lecks an,
in deinem Leck sind das aber "nur" die Lecks durch die Exceptiomn bei der AV selber.

Drück mal F7, wenn die Schutzverletzung kommt,
dann springt er meistens in die Nähe des verursachenden Codes.

Du könntest auch mal madexcept probieren,
dann aber das memcheck auskommentieren.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#13

Re: Programm belegt immer mehr Speicher

  Alt 8. Jul 2007, 15:21
Hallo,

bin immernoch auf der Suche nach den "Lecks". Hab jetzt rausgefunden, dass jede dynamisch erstellte Form 26kb nach dem free hinterlässt. Das macht bei 4 forms 104kb. Dazu kommen noch 4-12kb, die beim FreeLibrary übrig bleiben. Ist das richtig?

Es passiert folgendes:

1. Hauptprogramm wird geladen.
2. Ein PlugIn wird durch den Nutzer geladen. (Dazu der Code)

Delphi-Quellcode:
PlugIn:

procedure TKalender.CreateForms;
begin
  Form1:=TForm1.Create(nil);
  Form2:=TForm2.Create(nil);
  Form3:=TForm3.Create(nil);
  Form4:=TForm4.Create(nil);
end;
3. PlugIn wird irgendwann wieder beendet. (Dazu der Code)

  PostMessage(FindWindow(nil, 'Mein Hauptprogramm), WM_UNLOADPLUGIN, HInstance, 0); 4. Das Hauptprogramm schließt das PlugIn

Delphi-Quellcode:
procedure TForm2.UnloadPlugIn(var msg: TMessage);
var
  hndl: Integer;
  i: Integer;
begin
  hndl:= msg.WParam;
  for i:=0 to High(PJPlugIn) do
  begin
    if(PJPlugIn[i].PlugInHandle = hndl) then
    begin
      PJPlugIn[i].PlugInName.FreeForms;
      FreeLibrary(PJPlugIn[i].PlugInHandle);
      PJPlugIn[i].PlugInTitel:='';
      PJPlugIn[i].PlugInFile:='';
      PJPlugIn[i].PlugInName:=nil;
      PJPlugIn[i].PlugInHandle:=0;
    end;
  end;
  PJPlugIn:=nil;
end;
5. Die Prozedur FreeForms im PlugIn sieht so aus:

Delphi-Quellcode:
  Form1.Free;
  Form2.Free;
  Form3.Free;
  Form4.Free;
Mach ich da was falsch? Es sind alle Komponenten in den Forms freigegeben. Wenn ich ein neues PlugIn mit einer Form erstelle, bleiben 26kb übrig.


Danke
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#14

Re: Programm belegt immer mehr Speicher

  Alt 9. Jul 2007, 10:41
Hallo,

ich würde erst mal deine Form-Variablen prüfen,
deine Hauptform-Variable heisst Form2,
einer der Plugin-Vars auch.

Ich benutze prinzipiell nicht die von der IDE
angelegten Variablen, sondern (meistens) lokale,in der Art

Delphi-Quellcode:
procedure ExecForm_About;
var
  Form: TForm_About;
begin
  Form:= TForm_About.Create(NIL);
  try
    Form.ShowModal;
  finally
    Form.Free;
  end;
end;
Da du wohl die 4 Forms gleichzeitig brauchst,
packst du die in deine TKalenderklasse als Klassen-Variablen.
Aber bitte mit richtigen Namen.

Dann schnappe dir memcheck (das kann auch Dlls prüfen).

Ausserdem prüfe mal, ob deine TFormX (argz ) .destroy wirklich aufgerufen wird
z.B. mit einer MessageBox.


Hm, etwas ist mir noch aufgefallen.

PJPlugIn:= NIL;

Wie ist PJPlugIn definiert ?
Was soll diese Zeile machen ?
Falls es ein dynamisches array ist, würde ich mal nen SetLength(PJPlugIn, 0);
davor setzen, oder ein FreeAndNIL.

Mit dynamischen arrays kenne ich mich aber nicht aus,
ich benutze immer TList.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#15

Re: Programm belegt immer mehr Speicher

  Alt 9. Jul 2007, 19:13
Danke. Das werde ich mal ausprobieren.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 00:10 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