我的窗体除了主窗体是自动创建,然后全部窗体(包括数据库组件)都是需要是动态创建的,但在使用完后都用destroy进行释放,但我通过windows的任务管理器查看到占用的内存并不会随窗体的释放而减少。请问是什么原因?

解决方案 »

  1.   

    Create -> Free 对应
      

  2.   

    windows的任务管理器并不能实时反应内存的变化,你用其他的工具查看一下,窗体释放后的5秒之内,内存确实是释放了的
    with TFmSub.Create(self) do
    begin
      try
       showmodal;
      finally
       free;
      end;
    end;
      

  3.   

    windows的任务管理器也看不出内存减小, 那个只是大概
      

  4.   

    释放的时候用Free
    在Free方法中会判断对象本身是否为nil,如果不为才调用对象destroy的。这样增加安全性.
      

  5.   

    windows的任务管理器也看不出内存减小
      

  6.   

    destroy大都是程序自己调用的 释放的话上面的人都说了
      

  7.   

    还是用FREE,并且WINDOWS的任务管理器也不会准确的反映你的使用情况的
      

  8.   

    要做到资源的合理的管理和内存的正确回收需要注意以下几个方面的内容:
    1、动态创建的对象能够显式的释放:
       如上面各位兄第所说的,在窗体程序中自动创建后能显式的(就是直接调用free了)
       将其销毁,而不是默认由Delphi自己释放。
    2、动态的打开文件或数据库表:
       使用的时候再打开,不用的时候就Close掉
    3、动态分配的内存最好显式的回收
       方法与上面的相似,如:对变长数组的引用,如果无用后应该把数组的长度设为一个适应
       的最小值。
    就行了。