Thema: Delphi Speicherverwaltung

Einzelnen Beitrag anzeigen

GroHae

Registriert seit: 19. Apr 2007
Ort: Nabburg
83 Beiträge
 
Delphi 2007 Enterprise
 
#1

Speicherverwaltung

  Alt 30. Mär 2010, 08:32
Hallo zusammen,

Wenn ich meine Programme mit dem Taskmanager beobachte stelle ich fest, dass zur Laufzeit nicht immer der Arbeitspeicher ganz frei gegeben wird. Ich habe mir jetzt eine Minianwendung geschrieben um mir das genauer anzuschauen.

Hier der Code:

Delphi-Quellcode:

unit UnitDB_Prozess;

interface

uses classes, dialogs, sysutils;

type

 {$REGION 'Typendeklaration Prozess'}

  TRecProzess = class(TObject)
  private
    FFirmenNr_ID : integer;
    FProzess_ID : integer;
    FName : string;
  protected
  public
    procedure Clear;
    procedure Copy(iQ: TRecProzess);
    function ISEqual(iQ: TRecProzess): boolean;
    function Clone: TRecProzess;

    property FirmenNr_ID: integer read FFirmenNr_ID write FFirmenNr_ID;
    property Prozess_ID: integer read FProzess_ID write FProzess_ID;
    property Name: string read FName write FName;
  end;

 {$ENDREGION}

implementation

 {$REGION 'TRecProzess'}

procedure TRecProzess.Clear;
begin
  FFirmenNr_ID := 0;
  FProzess_ID := 0;
  FName := '';
end;

procedure TRecProzess.Copy(iQ: TRecProzess);
begin
  FFirmenNr_ID := iQ.FirmenNr_ID;
  FProzess_ID := iQ.Prozess_ID;
  FName := iQ.Name;
end;

function TRecProzess.ISEqual(iQ: TRecProzess): boolean;
begin
  result :=
   (FFirmenNr_ID = iQ.FirmenNr_ID) and
   (FProzess_ID = iQ.Prozess_ID) and
   (FName = iQ.Name);
end;

function TRecProzess.Clone: TRecProzess;
begin
  result := TRecProzess.Create;
  result.Copy(self);
end;

 {$ENDREGION}

end.
Und mein "Test"

Delphi-Quellcode:

procedure TForm6.Button1Click(Sender: TObject);
var
  FObjListe : TObjectList;
  i : integer;
begin
  FObjListe := TObjectList.Create;
  for i := 0 to 500000 - 1 do
    begin
      FObjListe.Add(TRecProzess.Create)
    end;
  ShowMessage('Hallo');
  FObjListe.Free;
end;
Vor dem Button drücken sagt der Taskmanager 3.516 K
Vor ShowMassage dann 17.252 K
Danach dann 6.332 K

Warum komme ich nicht mehr auf die 3.516 K ??

Grüße

Thomas
Grüße

Thomas
  Mit Zitat antworten Zitat