内存占用过大问题(20分)

  • 主题发起人 主题发起人 mxq888
  • 开始时间 开始时间
M

mxq888

Unregistered / Unconfirmed
GUEST, unregistred user!
描述如下:

假如我做程序如下:一主窗体A,上面只有一按钮,点按钮打开一窗口B。我所有操作全在此窗口中,可能很多代码写得不好罢,运行一耗时操作后,内存占用升至100多M。虚拟内存也有100多M,
问:为什么我关闭窗口B,内存不见减少,而要退出程序,内存才全部释放?我所有变量,操作全是在窗口B中的啊?
如何才能使用内存占用不增加这么多呢? 上面只是我操作一次的情形,如果我不退出程序而反复再操作几次,就会出现“你的虚拟内存太低。。。”的提示了。。
谢谢
 
你关闭窗口的时候有没有在窗口的OnClose中编写真正使窗口析构并释放内存的代码呢?如果没有则窗口仅仅是隐藏起来了。另外,你在该窗口中创建的类或者别的数据结构有没有在窗口关闭前加以释放呢?如果没有释放,当然也会继续占用内存直至应用程序退出为止了。
建议在窗体的OnClose事件中这样写代码:
procedure TSomeForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeAndNil(对象);
Action := caFree;
SomeForm := nil;
end;
请试试看
 
onclose event
action:=caFree;

不要一次性创建所有窗体,需要时创建,不需要时销毁
 
1.創建類對象後,不用時要記得釋放.
如: form1.free;
2.在窗體的onClose中可以寫上Action:=caFree;
 
你关闭窗口的时候有没有在窗口的OnClose中编写真正使窗口析构并释放内存的代码呢?如果没有则窗口仅仅是隐藏起来了。

我没有写,不明白Close 不能完全释放窗体吗?
谢谢各位的帮助!
 
后退
顶部