공통 [베를린] TBufferedFileStream을 이용해 TFileStream 보다 더 빠르게 파일을 읽고, 쓸수 있습니다.
2016.05.09 11:05
버퍼를 이용한 파일 스트림 - TBufferedFileStream
버퍼링을 지원하는 파일스트림을 이용해 파일 I/O 작업을 더 빠르게 진행할 수 있는 TBufferedFileStream이 RAD Studio 10.1 베를린에 추가되었습니다.
위 그림과 같이 기존 파일 스트림(TFileStream)으로 진행시 1,556 msec 걸리던 작업을 버퍼링을 지원하는 파일 스트림(TBufferedFileStream)을 이용할 경우 15 msec로 큰 속도 차이를 보이는 것을 확인할 수 있습니다.
위에서 사용한 코드는 아래와 같습니다.
uses
System.Diagnostics; // TStopwatch
procedure TForm1.btnWriteClick(Sender: TObject);
var
sw: TStreamWriter;
I: Integer;
begin
sw := TStreamWriter.Create('test.txt', False, TEncoding.UTF8);
try
sw.WriteLine('Hello world');
for I := 0 to 99999 do
sw.WriteLine('Hello ' + I.ToString);
finally
sw.Free;
end;
Memo1.Lines.Add('File written')
end;
procedure TForm1.btnReadClick(Sender: TObject);
var
FileStream: TFileStream;
Total, I: Integer;
sw: TStopWatch;
ch: Char;
begin
sw := TStopwatch.StartNew;
FileStream := TFileStream.Create('test.txt', fmOpenRead);
try
Total := 0;
while FileStream.Read(ch, 1) = 1 do
begin
if ch = #13 then
Inc(Total);
end;
Memo1.Lines.Add('Lines : ' + Total.ToString);
finally
FileStream.Free;
end;
sw.Stop;
Memo1.Lines.Add('TFileStream msec : ' + sw.ElapsedMilliseconds.ToString);
end;
procedure TForm1.btnReadBufferedClick(Sender: TObject);
var
BufFileStream: TFileStream;
Total, I: Integer;
sw: TStopWatch;
ch: Char;
begin
sw := TStopwatch.StartNew;
BufFileStream := TBufferedFileStream.Create('test.txt', fmOpenRead);
try
Total := 0;
while BufFileStream.Read(ch, 1) = 1 do
begin
if ch = #13 then
Inc(Total);
end;
Memo1.Lines.Add('Lines : ' + Total.ToString);
finally
BufFileStream.Free;
end;
sw.Stop;
Memo1.Lines.Add('TBufferedFileStream msec : ' + sw.ElapsedMilliseconds.ToString);
end;