我编写了一个IC卡地磅称重的软件,其中有一个单独的服务是在称的仪表中取数和检测是否有卡在刷。我通过一个定时器来不断的对仪表传统送过来的数据进行分析。并显示在窗体上,然后我又弄了一个定时器。每隔一秒钟检测一下有没有刷卡。如果有卡在刷,那就执行刷卡的操作。上面的功能我都通过定时器来实现了。数据也很准确。但是程序在运行一段时间后就会自动退出。后来我分析了一下内存。原来内存在不段的增长,当长到一定的程序时程序就会自动的退出了。请问我应该怎么样改呢。才能让内存不再这样增长。在定时器中定义的变量是这样的。帮我看一下为什么内存增长会那么快吧。谢谢啦。代码:
procedure Tform_bangcheng.Timer2Timer(Sender: TObject);
var
    i:integer;
    DataByte:array[0..CACHE] of Byte;
    nBytesRead:LongWORD ;
    dwError:LongWORD ;
    cs:TCOMSTAT;
    gBufferLength: integer;
    sCurrentContent : string;
    iCurrentContent : integer;begin
     ........
end;procedure Tform_bangcheng.Timer4Timer(Sender: TObject);
var
    byteCardType : pbyte;
    intStatues : integer ;
begin
   intStatues:=DC_AutoTestCard(byteCardType);  //判断卡是否存在。=0:存在 否则不存在;
   .....
END;

解决方案 »

  1.   

    内存泄露比较难找,你提供的代码太少,看不出什么来。请注意create后需要destroy,等等。
      

  2.   

    你在运行下一个timer时,上一个timer一定要关闭
      

  3.   

    //清内存
    procedure TForm1.ClearMemory;
    begin
    if Win32Platform = VER_PLATFORM_WIN32_NT then
      begin
        SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
        application.ProcessMessages;
      end;
    end;
    放在timer中,5秒一次,死循环,效果不错