我的程序在退出后还有进程驻留在内存,如何释放? 是用application.terminate结束的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不应该用这种方式结束程序,就像VB不应该滥用END一样,这种方法是强制程序中止,而不是正常结束,所以你的窗体、类没有正确的得到销毁,那么,在这些类里面申请的资源将无法正常交还系统,自然产生垃圾,也就是内存泄露。如果你是个懒惰的程序员,你可以去用.NET,否则,请仔细阅读程序员手册。 也就是说我应当释放完所有的资源,关闭数据库连接才可以结束程序,可是我的窗体实在是太多了,并且我在form.show之后就立即执行了form.free,难道在关闭程序时还得destroy吗? 在Form.Show后能立即执行Form.Free吗?一般来说,Free后的Form已经释放干净了,如果再不放心,可以用FreeAndNil(Form1),释放完Form后把指针置空。 一般程序你这样做就不会出现那么多窗体了,不过必须在PROJECT-》OPTIONS里把f_tuista放到右边f_tuista:=tf_tuista.Create(application);f_tuista.ShowModal;f_tuista.Free; 在Form.Show后能立即执行Form.Free吗?一般来说,Free后的Form已经释放干净了,如果再不放心,可以用FreeAndNil(Form1),释放完Form后把指针置空。--------------------------------------------------------------------我是在showmodal以后执行free,不好意思那么数据库的连接以及一些系统类的对象如Tregist也要关闭或释放吗?我的程序并不是每次退出都会这样,而是时不时来这么一回 推荐你学习使用profiler工具,比如AQtime之类的。一方面可以测试class或者interface的泄漏,最重要的,它能够告诉你哪里出了问题,寻根溯源,找到源代码就万事OK了。可以上DelphiBox下载该软件。里面有Tutorial,非常详细。内存泄漏是非常郁闷而且脸面无光的事情。祝你好运。 在主窗体中的FormDestroy事件中:if Form1 <> nil then FreeandNil(Form1);if Form2 <> nil then FreeandNil(Form2);... 尽量不要系统自动创建那么多的窗体,所有窗体用手工创建,否则你的资源都吃不消,我曾经在98下连续开70个窗体,导致资源不足,当然2000下这个问题不会出现。创建模态窗体尽量用TRY..FINALLY..END保护你的资源不讳因为异常导致泄露。子窗体在FormClose事件里面输入 Action := caFree;确保它会直接释放,而不是最小化。一般来说只要调用主窗体的CLOSE方法,就可以让程序结束,每个子窗体都会得到这个消息,产生FormClose事件,然后的事情就是在这里面写资源销毁代码了。 如何用Query打开EXCEL 如何通过编程把图片存到服务器呢?解决了,大分相送 IntraWeb中Session保存对象,200分散分,高手请进! 取ListView的Caption的问题,还望指教! 这样使COOLBAR实现拖动功能? 讨论主从表问题,欢迎大家积极参与讨论! listbox的问题 简单、送分!!---怎样获得鼠标点击位置在窗体中的坐标????------一定给分!!!! 关于窗口的生成的问题 光纤问题 刚开始接触TcpClient 请多关照 [ReceiveBuf 数据的问题] 郁闷ing..... 能不能不将JPEG流不放到IMAGE里面就将其缩小?
如果你是个懒惰的程序员,你可以去用.NET,否则,请仔细阅读程序员手册。
一般来说,Free后的Form已经释放干净了,如果再不放心,可以用FreeAndNil(Form1),释放完Form后把指针置空。
f_tuista:=tf_tuista.Create(application);
f_tuista.ShowModal;
f_tuista.Free;
一般来说,Free后的Form已经释放干净了,如果再不放心,可以用FreeAndNil(Form1),释放完Form后把指针置空。
--------------------------------------------------------------------
我是在showmodal以后执行free,不好意思
那么数据库的连接以及一些系统类的对象如Tregist也要关闭或释放吗?我的程序并不是每次退出都会这样,而是时不时来这么一回
FreeandNil(Form1);
if Form2 <> nil then
FreeandNil(Form2);
...
创建模态窗体尽量用TRY..FINALLY..END保护你的资源不讳因为异常导致泄露。
子窗体在FormClose事件里面输入 Action := caFree;确保它会直接释放,而不是最小化。
一般来说只要调用主窗体的CLOSE方法,就可以让程序结束,每个子窗体都会得到这个消息,产生FormClose事件,然后的事情就是在这里面写资源销毁代码了。