Einzelnen Beitrag anzeigen

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