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在forwhile 循环中使用,被频繁调用很多次时,极易抛出EoutOfMemory异常。此时建议将setlengt拿到循环外部使用,或一次性调用,为动态数组或结构分配足够大的空间。
--------------------- 
作者:北环阳光 
原文:https://blog.csdn.net/lotusyangjun/article/details/8203521 

相关阅读 >>

Delphi 通用字符串函数

Delphi indy控件实现网络验证与asp通信

Delphi isdirectory 判断是否是目录

Delphi 之 对话框组件

Delphi 搜索某个字的位置 [带重复]

Delphi 无类型文件读写

Delphi firemonkey处理图形的方式与vcl处理图形的方式大不相同

Delphi 5-7 桥接让Delphi xe2 datasnap中间层支持Delphi低版本开发客户端

Delphi 设置系统静音取消系统静音

Delphi 从其它access数据导入数据到本地数据库

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    正在狠努力加载,请稍候...