同上

解决方案 »

  1.   

    http://www.138soft.com/htm/AuthorArt/index.htm如何用Delphi设计内存优化程序---兼谈程序设计分析 
     
      陈经韬  
        电脑启动一段时间后,因为运行了很多程序,整台电脑速度会越来越慢.为什么呢?原来很多程序运行的时候需要占用很多内存.即使程序退出后仍然无法完全释放的.那么如何找回丢失的内存呢?现在有很多这类程序,比如说<<Windows优化大师>>就带了一个<<Windows内存整理>>工具.我手头上的是V1.1版本.
        程序设计会写代码很重要.程序设计思路更重要.程序设计分析别人的思路然后归自己所有更更重要.我希望通过这篇文章让大家掌握如何分析别人的思路,这样比单纯公布思路有价值的多.
        先把话题扯远一点.木马冰河大家应该听说过吧.它的配置就很值得我们学习.一般这类软件的原理是这样的:客户端程序把信息写进服务端,服务端第一次运行的时候从自己身上读取出来保存到注册表或者INI文件里面.这样做的好处在于方便远程更新的时候直接修改注册表即可.这样做也有个致命BUG,就是别人用注册表监视器之类很容易就发现,这样一来别人就很容易知道接收者的信箱了.怎么办呢?冰河原来是采用把信息写进自己里面.但是自己怎么写进自己里面呢?我们分析一下就知道答案了.
    首先,第一步先修改注册表:在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\WinoldApp下新建一个双字节类型的键名为Disabled键值为1的新键,其作用是禁止运行DOS程序(包括批处理文件).当然你也可以用超级兔子之类的程序来修改.第二步:配置服务端种子,我们选择安装在<TEMP>目录下(原因:文件比<windows>、<system>下都要少),把<TEMP>目录下尽量清空,以便于我们下一步分析。
    第三步:运行服务端,用客户端成功连接后远程修改配置,系统会弹出一个窗口:本次操作受限制.第四步:打开<TEMP>目录,发现除了服务端文件外,多了两个文件:NewFile.exe和sysclr.bat。击右键查看属性可以看出NewFile.exe跟服务端文件大小一样,从而知道它是服务端的备份。打开sysclr.bat,内容如下:
    @echo off
    :loop
    del c:\windows\TEMP\NewFile.exe
    if exist c:\windows\TEMP\NewFile.exe goto loop
     ...
      

  2.   

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

  3.   

    你要的是不是这个啊?SetProcessWorkingSetSize(GetCurrentProcess,$FFFFFFFF,$FFFFFFFF);