动态数组释放问题,delphi释放内存问题
我声明全局变量动态数组 A,在释放的时候为什么要先setlength(A,0),然后freeandnil呢,不用freeannil行吗?如果不用freeandnil,会出现情况呢。
我参与的是实时监控项目,需要不断根性数据,也就是说,不断清空哈希表,然后再向里边填充数据,然后在清空。数据每1分钟更新一次,我检查了每个函数和过程,还有全局变量,该释放时候都手动释放了,尤其是局部数组和哈希表等等,我都手动释放,为什么运行一段时间后,程序占用的内存一直再涨啊?TTTTTTTT。。。。
最后我使用了网上一段代码,放到程序当中,隔一段时间运行一次,代码是
procedure TfrmMain.ClearMemory;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
application.ProcessMessages;
end;
end;
这段代码是什么意思啊,用到这段代码后,内存瞬间减少很多。但是占用内存大小并不确定,有时候我一直看着,最大不过10M,而且马上就小了。有的时候涨到20M左右,但是不会再明显增加,维持在20M。
如果去掉这段代码,我点击子窗体,然后关闭他,再点击,再关闭,内存一直在涨,关闭之后却没有明显释放内存。我没有在dpr当中创建子窗体,只是在程序中creat(nil),然后,手动在finnaly中free他。看起来,是手动创建,手动释放,但是却一直涨内存,为什么呢。。。YTTTTTTTTTTTTTTTTTTTTTTT