Hallo,
hatte öfter mal Objekte oder Speicher nicht richtig freigegeben , aber in diversen Schleifen immer wieder neu erzeugt und so ne Menge Leichen erzeugt.
Nun überwache ich meinen aktuellen Speicherbedarf mit 'GetHeapStatus.TotalAllocated' .
Einfach ab und an per Timer abfragen.
Kann man prima in einer Statusbar, fest eingebaut im Programm, ausgeben.
Quelltext und ZIP siehe unten.
Button 1 erzeugt eine Integer-Matrix [100,100].
Button 2 setzt die Matrix auf [0,0] zurück.
Gruß
Frank
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls;
type
TForm1 =
class(TForm)
Timer1: TTimer;
Button1: TButton;
ListBox1: TListBox;
Button2: TButton;
StatusBar1: TStatusBar;
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
Tint_vektor=array
of integer;
Tint_matrix=array
of Tint_vektor;
var
Form1: TForm1;
m:tint_matrix;
implementation
{$R *.dfm}
// Speicher-Bedarf-Abfrage
procedure TForm1.Timer1Timer(Sender: TObject);
var Speicherinfo:THeapStatus;
begin
// Aktuellen Speicherbedarf ausgeben
speicherinfo:=GetHeapStatus;
statusbar1.Panels[0].Text:=
'
Aktueller Speicherbedarf='+
inttostr(speicherinfo.TotalAllocated)+
'
Byte';
end;
// eine Integermatrix m[100,100] Global erzeugen
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
s:
string;
begin
listbox1.Clear;
setlength(m,100,100);
for i:=0
to 99
do
begin
s:='
';
for j:=0
to 99
do
begin
m[i,j]:=i*j;
s:=s+floattostr(m[i,j])+'
';
end;
listbox1.Items.Add(s);
end;
end;
// die Integer-Matrix auf m[0,0] zurücksetzten
procedure TForm1.Button2Click(Sender: TObject);
begin
setlength(m,0,0);
listbox1.Clear;
end;
end.