Moin,
[...]Achja, was mir mal aufgefallen war:
SetLength(ArrayEinesTyps, 2);
rufe ich das einmal auf, so wird der Speicher einmal für zwei ArrayEintraege belegt.
Rufe ich das nochmals auf, so wird ungenutzter Speicher dafür neu belegt, der alte aber nicht freigegeben, laut Taskmanager bleibt der
RAM genutzt. [...]
Bist du dir da sicher? Ich behaupte mal so, dass sogut wie keiner das alte Array "freigibt". Und MemoryLeaksOnShutdown meldet da ja auch nichts. Aber ich teste es einfach mal.
So, also mit folgenden Code bleibt der
RAM Verbauch konstant bei 44 MiB (und dabei ist das Array selber schon
~ 40 MB groß):
Delphi-Quellcode:
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
x : array of Integer;
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
SetLength(x, 10000000);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
while True do
Button1Click(nil);
end;
Übrigens wegen der Defragmentierung: Stimmt, naja wer sagt da das man x64 nicht braucht
Da kann es einen egal sein (sofern die Anwendungd das nutzt).
MfG
Fabian