R
rsina
Unregistered / Unconfirmed
GUEST, unregistred user!
小弟我最近在看d5开发人员指南,其中有一个关于模式窗体的部分很是奇怪。我的确是实现了书中的代码和理解了他想说明什么,不过我在试验的时候发现了一个很奇怪的问题。
首先建立两个窗体,其中form2在dpr文件中,注释掉创建的那句代码,在CLOSE事件中设置
Action := caFree
在 FormDestroy 事件中设置 form2 := nil;和 form2.free;
form1上放一个按钮,事件如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
unit2.Form2 := TForm2.Create(self);
unit2.Form2.Height := 50;
unit2.Form2.Width := 50;
unit2.Form2.Top := 50;
unit2.Form2.Left := 50;
unit2.Form2.Show;
end;
运行起来一切正常,并且打开的窗体内存被释放掉了。但是仔细看发现第一次打开form2窗体的时候,内存增加了原有值+60K左右,之后关闭form2窗体增加的并不减少,你再次打开form2窗体,内存又增加原有值+60K+12K,但是你关闭的时候内存会恢复到原有值+60K,也就是说第一次打开的那60k不会释放。这是为什么啊?
后来请教了香帅大哥,他指点说用消息的方法好些,于是我在form2关闭的时候发一个消息给form1,由form1来freeandnil form2,但是结果还是一样。
奇怪了,难道delphi没有完全释放窗体内存啊?
呵呵,小弟问题多,分又少,见谅。
首先建立两个窗体,其中form2在dpr文件中,注释掉创建的那句代码,在CLOSE事件中设置
Action := caFree
在 FormDestroy 事件中设置 form2 := nil;和 form2.free;
form1上放一个按钮,事件如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
unit2.Form2 := TForm2.Create(self);
unit2.Form2.Height := 50;
unit2.Form2.Width := 50;
unit2.Form2.Top := 50;
unit2.Form2.Left := 50;
unit2.Form2.Show;
end;
运行起来一切正常,并且打开的窗体内存被释放掉了。但是仔细看发现第一次打开form2窗体的时候,内存增加了原有值+60K左右,之后关闭form2窗体增加的并不减少,你再次打开form2窗体,内存又增加原有值+60K+12K,但是你关闭的时候内存会恢复到原有值+60K,也就是说第一次打开的那60k不会释放。这是为什么啊?
后来请教了香帅大哥,他指点说用消息的方法好些,于是我在form2关闭的时候发一个消息给form1,由form1来freeandnil form2,但是结果还是一样。
奇怪了,难道delphi没有完全释放窗体内存啊?
呵呵,小弟问题多,分又少,见谅。