Delphi Setlength 記憶體釋放總結
https://blog.csdn.net/lotusyangjun/article/details/8203521
一、在Setlength 被呼叫次數不多時,可直接使用以下程式碼進行釋放
var
aa: array of integer;
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
SetLength(aa, 1000);
for I := 0 to 999 do
begin
aa[I] := i;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SetLength(aa, 0);
end;
//這樣就OK 了
二、如果是作為臨時變數,賦值給Result作為函式的返回值時,此時除釋放bb外,還需釋放臨時變數aa。
type
Taa=array of Integer;
procedure TForm1.Button3Click(Sender: TObject);
var bb : Taa;
begin
bb := getaa;
SetLength(bb,0); //執行此行,記憶體無變化
end;
function TForm1.getaa:Taa;
var i : Integer;
begin
SetLength(aa,10000000); //如果採用SetLength(Result,10000000); 直接為Result賦值然後返回,則在上面Button3Click可釋放記憶體
for i := 0 to 10000000 - 1 do
begin
aa[i] := i + 1;
end;
Result := aa;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SetLength(aa,0); //執行此行,記憶體佔用才減少
end;
三、當Setlength在for 或while 迴圈中使用,被頻繁呼叫很多次時,極易丟擲EoutOfMemory異常。此時建議將setlengt拿到迴圈外部使用,或一次性呼叫,為動態陣列或結構分配足夠大的空間。
---------------------
作者:北環陽光
來源:CSDN
原文:https://blog.csdn.net/lotusyangjun/article/details/8203521
版權宣告:本文為博主原創文章,轉載請附上博文連結!