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
版权声明:本文为博主原创文章,转载请附上博文链接!
Delphi Setlength 内存释放总结的更多相关文章
- zw版【转发·台湾nvp系列Delphi例程】.NET调用HALCON COM控件内存释放模式
zw版[转发·台湾nvp系列Delphi例程].NET调用HALCON COM控件内存释放模式 ------------------------------------方法一 :Imports Sys ...
- delphi record 内存怎么释放
delphi record 内存怎么释放 是不需要释放的,除非你使用指针方式生成的.
- Delphi 的内存操作函数(2): 给数组指针分配内存
静态数组, 在声明时就分配好内存了, 譬如: var arr1: ..] of Char; arr2: ..] of Integer; begin ShowMessageFmt('数组大小 ...
- Delphi的内存管理及内存泄露问题 FastMM4
这几天因为一个程序长时间运行出现比较严重的内存泄露问题,开始关注了一下内存管理方面的东西,以前也注意内存管理,创建了对象及时释放,但总有忘了处理的情况. 在Delphi中没有自动回收机制,所以一定要及 ...
- ParentWindow属性及其一系列函数的作用——适合于那些不需要父控件管理内存释放的子控件
TWinControl = class(TControl) property ParentWindow: HWnd read FParentWindow write SetParentWindow; ...
- Delphi窗体创建释放过程及单元文件小结(转)
Delphi窗体创建释放过程及单元文件小结 Delphi中的窗体,有模式窗体与非模式窗体两种.两种窗体的调用方式不同,模式窗体使用ShowModal显示,非模式窗体使用Show显示.当显示模式窗体的时 ...
- Delphi 的内存操作函数(1): 给字符指针分配内存
马上能想到的函数有: GetMem AllocMem ReallocMem FreeMem GetMemory ReallocMemory FreeMemory New Dispose NewStr ...
- Delphi 的内存操作函数(1): 给字符指针分配内存( 给字符指针(PChar、PWideChar、PAnsiChar)分配内存最佳的选择是StrAlloc。分配内存的时候会对字符串进行初始化)
马上能想到的函数有: GetMem AllocMem ReallocMem FreeMem GetMemory ReallocMemory FreeMemory New Dispose NewStr ...
- 用Delphi从内存流中判断图片格式[转]
http://blog.163.com/tfn2008%40yeah/blog/static/110321319201222243214337/ 用Delphi从内存流中判断图片格式[转] 2012- ...
随机推荐
- MFCWinInet学习
http://blog.csdn.net/segen_jaa/article/details/6278167 背景: 功能:服务端下载文件 服务端:用Java写Sevlet进行有效性验证 客户端:用C ...
- tomcat apr 部署
背景 这还是为了高并发的事,网上说的天花乱坠的,加了apr怎么怎么好,我加了,扯淡.就是吹牛用.我还是认为,性能问题要考设计逻辑和代码解决,这些都是锦上添花的. 步骤 1 windows 部署简单,虽 ...
- Linq与Lambda常用查询语法
1.查询全部 2.按条件查询全部 3.去除重复 4.连接查询 between and 5.排序 6.分组
- 【原创】测试基础之http_load(1)简介、安装、使用
http_load-09Mar2016官方:https://acme.com/software/http_load/ 一 简介 http_load - multiprocessing http tes ...
- 修复ogg source端意外宕机造成的数据不同步
修复ogg source端意外宕机造成的数据不同步 分类: Oracle2016-04-28 11:50:40原文地址:修复ogg source端意外宕机造成的数据不同步 作者:十字螺丝钉 ogg s ...
- LuoGu P1083 借教室
题目传送门 借教室这个题有两种做法,差分+前缀和或者是线段树 线段树维护区间最小值,因为能不能借教室使用是由这几天中可用教室最少的一天决定的 其实这题是个很裸的线段树维护区间最小值,但有一点需要注意, ...
- Vue-tab选项卡
<div id='test'> <ul class="nav" > <li v-for='(item,index) in dataNav' @clic ...
- js获取参数函数
- 修改html中button显示的文字
1. <input type="button"> 实现密码输入框的可见和隐藏 直接修改value属性即可 <script type="text/jav ...
- Confluence 6 属性的一个活动
为了启用属性,使用上面描述的方法.针对所有的用户,属性每一个访问的页面,将会在你的应用服务器中进行记录,直到你对 Confluence 进行重启.请注意每次用户访问一个链接,一个单一的属性将会被打印出 ...