定时使用write(FF,my_type);时,为什么我的内存总是不断的增长4K?(100分)

  • 主题发起人 主题发起人 小羽
  • 开始时间 开始时间

小羽

Unregistered / Unconfirmed
GUEST, unregistred user!
try
AssingFile(FF,'aa.dat');
rewrite(FF); //定时新建文件
try
Write(FF,my_type);//关键是这句
except
end;
finally
CloseFile(FF);
end;
其中my_type 是我定义的一种类型 , 包括几个部分 ,最后一个是 arr:array【0。。32*1024-1】of single ,大概是128K多,
为什么每次写的时候内存就长4K,把write(FF,my_type);去了内存正常。
这是为什么?
 
能否把代码贴全一点
 
你是怎么确认这个原因增长4K,是不是读写文件的缓存原因。
 
把write(ff,my_type);去了就可以了。
 
源代码如下:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons;

type //A/D板读取的数据存储成内存文件格式记录,用于实时显示
TOrig_TimeSignal=record
Channel_Count:word; //通道数
Point_Count:integer; //每通道的点数
sampleRate:double; //采样频率
R_Time:TDateTime; //当前时间
R_Revolution:word; //转速
O_Arr:array[0..8192*2-1] of Single;
end;


type
TForm1 = class(TForm)
Timer1: TTimer;
BitBtn1: TBitBtn;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var
i:word;
Orig_FileName:string;
SaveFilePf:file of TOrig_TimeSignal;
hisdir:string;
save_orig:TOrig_TimeSignal;
begin
save_orig.Channel_Count:=8;
save_orig.Point_Count:=2048;
save_orig.R_Time:=Now;
save_orig.sampleRate:=2000;
save_orig.R_Revolution:=round(4000);
randomize;
for i:=0 to 8*2048-1 do begin
Save_orig.O_Arr:=6*Sin(127.5*I*2*pi/5120+pi/0.69)+random(2)*Sin(I*1000*2*pi/5120+pi/2.3);
end;

hisdir:='D:/VibraHisData/'+FormatDateTime('yy-mm-dd',now);
if not DirectoryExists(hisdir) then
ForceDirectories(hisdir);
Orig_FileName:='D:/VibraHisData/'+FormatDateTime('yy-mm-dd',now)+'/'+FormatDateTime('hhmmss',now)+'.dat';

Assignfile(SaveFilePf,Orig_FileName);
Rewrite(SaveFilePf);
seek(SaveFilePf,fileSize(SaveFilePf));
try
Try
write(SaveFilePf,save_orig);
except
messagedlg('error of too long',mterror,[mbok],0);
end;
finally
Closefile(SaveFilePf);
end;
end;

end.
 
你不断地在写文件,
上一个Timer 还没完成,可能下一个又开始了。
会写出很多文件。
可以在 procedure TForm1.Timer1Timer(Sender: TObject);的开始写上:
begin
Timer1.Enabled:=false;
........
结束的地方再打开
Timer1.Enabled:=true;
end;
 
隔5秒写一个,没那么快吧。
 
好像长得更快了。
 
我发现是timer的原因,是它在不断的消耗内存!
timer中的interval设为1000表示1秒钟执行一次!本身就要消耗内存
而且如果interval设置的越小,则内存消耗的就大,你看看!
 
?不要TIMER,那这程序没法编了。
 
你写出的文件有多大?
好象不是上面的问题,
按道理讲,上一下timer 没完成,下一个是不执行的。对不起,上面可能讲得不对。
 
我好像找到了解决的方法。
 
后退
顶部