Delphi Setlength 内存释放总结

一、在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拿到循环外部使用,或一次性调用,为动态数组或结构分配足够大的空间。



 

你可能感兴趣的:(Delphi学习)