原因是要做一个多线程读取文本的小程序,但是各种纠结。不知道读取文本用哪个好。 TStringList 方便点,AssignFile快点。假如速度相差不是特别大的话,我还是选用TStringList吧。写了一段代码测试。如下:
program ReadTest;
{
Code by Michael J Scofield
Blog: http://blog.csdn.net/MichaelJScofield
}
{$APPTYPE CONSOLE}
uses
Classes,
Windows,
SysUtils;
var
iParam,i: Integer;
iTimeCount: LongInt;
lstLogs: TStringList;
fLogs: TextFile;
lpTmp: string;
begin
iParam := StrToInt(ParamStr(1));
case iParam of
1:begin
iTimeCount := GetTickCount;
lstLogs := TStringList.Create;
lstLogs.LoadFromFile('temp.txt');
for i:=0 to lstLogs.Count-1 do
begin
Writeln(lstLogs.strings[i]);
end;
iTimeCount := (GetTickCount - iTimeCount) div 1000;
Writeln(inttostr(iTimeCount)+' s');
lstLogs.Free;
end;
2:begin
iTimeCount := GetTickCount;
AssignFile(fLogs,'temp.txt');
Reset(fLogs);
repeat
Readln(flogs,lpTmp);
Writeln(lpTmp);
until Eof(fLogs);
iTimeCount := (GetTickCount - iTimeCount) div 1000;
Writeln(inttostr(iTimeCount)+' s');
CloseFile(fLogs);
end;
end;
end.
无耻地找了一个35579kb大的文本文件。
首先是TstringList跑的时间75 s
再者就是AssignFile的 69 s
虽然在测试的时候,跑着很多软件,都可能导致结果偏差。但是来回测试了几次,基本结果都是AssignFile稍微快点。但是用TStringList没想象中那么慢。值得一提的是,TStringList比较吃内存。粗略看了下,用它的时候 耗了70多MB内存,而AssignFile花费在13MB左右。
最后我还是决定用TStringList吧。