是用application.terminate结束的

解决方案 »

  1.   

    不应该用这种方式结束程序,就像VB不应该滥用END一样,这种方法是强制程序中止,而不是正常结束,所以你的窗体、类没有正确的得到销毁,那么,在这些类里面申请的资源将无法正常交还系统,自然产生垃圾,也就是内存泄露。
    如果你是个懒惰的程序员,你可以去用.NET,否则,请仔细阅读程序员手册。
      

  2.   

    也就是说我应当释放完所有的资源,关闭数据库连接才可以结束程序,可是我的窗体实在是太多了,并且我在form.show之后就立即执行了form.free,难道在关闭程序时还得destroy吗?
      

  3.   

    在Form.Show后能立即执行Form.Free吗?
    一般来说,Free后的Form已经释放干净了,如果再不放心,可以用FreeAndNil(Form1),释放完Form后把指针置空。
      

  4.   

    一般程序你这样做就不会出现那么多窗体了,不过必须在PROJECT-》OPTIONS里把f_tuista放到右边
    f_tuista:=tf_tuista.Create(application);
    f_tuista.ShowModal;
    f_tuista.Free;
      

  5.   

    在Form.Show后能立即执行Form.Free吗?
    一般来说,Free后的Form已经释放干净了,如果再不放心,可以用FreeAndNil(Form1),释放完Form后把指针置空。
    --------------------------------------------------------------------
    我是在showmodal以后执行free,不好意思
    那么数据库的连接以及一些系统类的对象如Tregist也要关闭或释放吗?我的程序并不是每次退出都会这样,而是时不时来这么一回
      

  6.   

    推荐你学习使用profiler工具,比如AQtime之类的。一方面可以测试class或者interface的泄漏,最重要的,它能够告诉你哪里出了问题,寻根溯源,找到源代码就万事OK了。可以上DelphiBox下载该软件。里面有Tutorial,非常详细。内存泄漏是非常郁闷而且脸面无光的事情。祝你好运。
      

  7.   

    在主窗体中的FormDestroy事件中:if Form1 <> nil then
      FreeandNil(Form1);
    if Form2 <> nil then
      FreeandNil(Form2);
    ...
      

  8.   

    尽量不要系统自动创建那么多的窗体,所有窗体用手工创建,否则你的资源都吃不消,我曾经在98下连续开70个窗体,导致资源不足,当然2000下这个问题不会出现。
    创建模态窗体尽量用TRY..FINALLY..END保护你的资源不讳因为异常导致泄露。
    子窗体在FormClose事件里面输入  Action := caFree;确保它会直接释放,而不是最小化。
    一般来说只要调用主窗体的CLOSE方法,就可以让程序结束,每个子窗体都会得到这个消息,产生FormClose事件,然后的事情就是在这里面写资源销毁代码了。