我编写了一个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;
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;
procedure TForm1.ClearMemory;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
application.ProcessMessages;
end;
end;
放在timer中,5秒一次,死循环,效果不错