Form占用内存释放(30分)

  • 主题发起人 主题发起人 历史的脐带
  • 开始时间 开始时间

历史的脐带

Unregistered / Unconfirmed
GUEST, unregistred user!
已经显式的Free了Form,跟踪进去发现程序也执行了Destroy,但在任务管理器里并没发现内存使用减少,这是为什么?
 
就free 了一个form 怎么可能看的出来 内存减少了啊~
 
create时很明显增加了,是不是delphi内部封装的create了什么东西?
 
釋放 form 之前先釋放form 上的其它須要 釋放 objects
 
最小化下主窗体,再看看内存
 
form里是否有要手工free的控件?
 
不要怀疑系统有问题
 
你是以什么方式show 的form? 是自动创建还是用Delphi里的form?如果是自动创建的,在第一次create后有加内存,free后不会释放,但是再create就不会家内存了。如果是Delphi里的form你看看工程里有没有 把第2个form 在开始时创建,如果没有就是会free不了内存。
 
如果是动态创建,手动释放后,在管理器里刷新一下,应该差不多吧。
 
不好意思,刚才写错了,是“动态创建”不是自动创建!呵呵。笔误!!
 
单单一个form占的内存很小的,在创建的时候增加了不少内存,那可能是form上有很多东西,free后没有减少可能是form上的东西有些没用被释放
 
把下面的过程放到一个Timer中,每隔一段时间执行一次,如5秒。
procedure ClearMemory;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
Application.ProcessMessages;
end;
end;
 
你在窗体里定义了一些其它的操作占用内存了吧?是不是没有全部释放?
 
我也会出现LZ说的情况,一直查找原因,就是不太明白,明明FreeAndNil调了,可是管理器中内存不会减少。希望能得到答案
 
DELPHI内存管理器也有自己的算法,在申请内存的时候它会申请一大块内存,然后程序向它申请时它取出一小块(这样是避免多次申请的开销),同理释放的时候它只是将这一块数据标记为可用,并不是真的归还给操作系统。
 
Action:=cafree;
在colse事件中
 
在colse事件中
Action:=cafree;
form1.free;
form1:=nil;
freeandnil(form1);
 
后退
顶部