请教下面的代码有什么区别啊:
[code]
type
PFileInfo = ^TFileInfo; //文件信息
TFileInfo = record
FName: string[255]; //文件名 256
FTime: Integer; //时间日期 4
FSize: Int64; //大小 8
FAttr: Integer; //属性 4
end;
//第一种种方法
procedure GetFileList(Dir : string;AStream: TStream); //文件列表
var
SearchRec:TSearchrec;
FileInfo:PFileInfo;
begin
GetMem(FileInfo,SizeOf(TFileInfo));
AStream.Size := 0;
if findFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then
repeat
if SearchRec.Name = '.' then Continue ;
FillChar(FileInfo^,SizeOf(TFileInfo),#0);
FileInfo^.FName := SearchRec.Name;
FileInfo^.FTime := SearchRec.Time ;
FileInfo^.FSize := SearchRec.Size ;
FileInfo^.FAttr := SearchRec.Attr;
AStream.WriteBuffer(FileInfo^,SizeOf(TFileInfo));
until findNext(SearchRec)<>0 ;
findClose(SearchRec);
FreeMem(FileInfo );
end;
//第二种方法
procedure ListFile2(Dir : string; AStream : TStream); //不用指针什么的
var
SearchRec : TSearchRec;
FileInfo : TFileInfo;
begin
AStream.Size := 0;
if FindFirst(Dir + '*.*', faAnyFile, SearchRec) = 0 then
repeat
if SearchRec.Name = '.' then Continue;
FileInfo.IsDrive := False;
FileInfo.FName := SearchRec.Name; //文件名
FileInfo.FTime := SearchRec.Time; //时间
FileInfo.FSize := SearchRec.Size; //大小
FileInfo.FAttr := SearchRec.Attr; //属性
AStream.WriteBuffer(FileInfo, SizeOf(TFileInfo)); //循环写入流
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
[/code]请问两种方法有什么不同,好像效果一样啊,是效率不同吗?
[code]
type
PFileInfo = ^TFileInfo; //文件信息
TFileInfo = record
FName: string[255]; //文件名 256
FTime: Integer; //时间日期 4
FSize: Int64; //大小 8
FAttr: Integer; //属性 4
end;
//第一种种方法
procedure GetFileList(Dir : string;AStream: TStream); //文件列表
var
SearchRec:TSearchrec;
FileInfo:PFileInfo;
begin
GetMem(FileInfo,SizeOf(TFileInfo));
AStream.Size := 0;
if findFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then
repeat
if SearchRec.Name = '.' then Continue ;
FillChar(FileInfo^,SizeOf(TFileInfo),#0);
FileInfo^.FName := SearchRec.Name;
FileInfo^.FTime := SearchRec.Time ;
FileInfo^.FSize := SearchRec.Size ;
FileInfo^.FAttr := SearchRec.Attr;
AStream.WriteBuffer(FileInfo^,SizeOf(TFileInfo));
until findNext(SearchRec)<>0 ;
findClose(SearchRec);
FreeMem(FileInfo );
end;
//第二种方法
procedure ListFile2(Dir : string; AStream : TStream); //不用指针什么的
var
SearchRec : TSearchRec;
FileInfo : TFileInfo;
begin
AStream.Size := 0;
if FindFirst(Dir + '*.*', faAnyFile, SearchRec) = 0 then
repeat
if SearchRec.Name = '.' then Continue;
FileInfo.IsDrive := False;
FileInfo.FName := SearchRec.Name; //文件名
FileInfo.FTime := SearchRec.Time; //时间
FileInfo.FSize := SearchRec.Size; //大小
FileInfo.FAttr := SearchRec.Attr; //属性
AStream.WriteBuffer(FileInfo, SizeOf(TFileInfo)); //循环写入流
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
[/code]请问两种方法有什么不同,好像效果一样啊,是效率不同吗?
怎么看不到代码
type
PFileInfo = ^TFileInfo; //文件信息
TFileInfo = record
FName: string[255]; //文件名 256
FTime: Integer; //时间日期 4
FSize: Int64; //大小 8
FAttr: Integer; //属性 4
end;
//第一种方法
procedure GetFileList(Dir : string;AStream: TStream); //文件列表
var
SearchRec:TSearchrec;
FileInfo:PFileInfo;
begin
GetMem(FileInfo,SizeOf(TFileInfo));
AStream.Size := 0;
if findFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then
repeat
if SearchRec.Name = '.' then Continue ;
FillChar(FileInfo^,SizeOf(TFileInfo),#0);
FileInfo^.FName := SearchRec.Name;
FileInfo^.FTime := SearchRec.Time ;
FileInfo^.FSize := SearchRec.Size ;
FileInfo^.FAttr := SearchRec.Attr;
AStream.WriteBuffer(FileInfo^,SizeOf(TFileInfo));
until findNext(SearchRec)<>0 ;
findClose(SearchRec);
FreeMem(FileInfo );
end;
//第二种方法
procedure ListFile2(Dir : string; AStream : TStream);
var
SearchRec : TSearchRec;
FileInfo : TFileInfo;
begin
AStream.Size := 0;
if FindFirst(Dir + '*.*', faAnyFile, SearchRec) = 0 then
repeat
if SearchRec.Name = '.' then Continue;
FileInfo.IsDrive := False;
FileInfo.FName := SearchRec.Name; //文件名
FileInfo.FTime := SearchRec.Time; //时间
FileInfo.FSize := SearchRec.Size; //大小
FileInfo.FAttr := SearchRec.Attr; //属性
AStream.WriteBuffer(FileInfo, SizeOf(TFileInfo)); //循环写入流
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
这就是所谓的栈的分配和回收速度比堆要快的体现。
其实栈分配内存只要把ESP寄存器中的指针移动一下位置就行了。