버퍼를 이용한 파일 스트림 - TBufferedFileStream

TBufferedFileStream.png

 

버퍼링을 지원하는 파일스트림을 이용해 파일 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;

관련 글


번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 18047
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 16376
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 19007
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 24624
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 25990
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 21365
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 41955
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 177245
983 [웹세미나] So Many Devices, So Little Time: 파이어몽키로 더욱 빠르게 각 디바이스용 앱 개발 관리자 2013.07.19 3414
982 [추가된 문법 정리] - 배열 상수 초기화:델파이 XE7 추가 관리자 2016.06.03 3393
981 이 달의 기술자료 - 2014년 9월 file 험프리 2014.08.11 3390
980 Release Notes for XE5 Update 1 c2design 2013.10.29 3382
979 CodeRage 8: Delphi 온라인 무료 세미나 개최 관리자 2013.10.15 3366
978 SVN 서버 설치하기 - Visual SVN 이용 험프리 2016.02.29 3362
977 XE5용 업데이트2 가 공개되었습니다. 관리자 2013.12.16 3333
976 XE7에서 추가 된 안드로이드 프로젝트에서 외부 라이브러리(jar) 사용을 위한 정보 [1] Humphery 2014.11.03 3238
975 이 달의 강의 - 2015년 11월 관리자 2015.01.22 3197
974 안드로이드에서 NFC 연동 방법 Humphery 2014.09.12 3152
973 이전버전에서 최신버전으로 마이그레이션(업그레이드) 참고문서 Humphery 2014.02.28 3127
» [베를린] TBufferedFileStream을 이용해 TFileStream 보다 더 빠르게 파일을 읽고, 쓸수 있습니다. file 험프리 2016.05.09 3115
971 [추가자료] 안드로이드 개발환경 추가 조치방법 - 수동 SDK Tools 업데이트 file Humphery 2015.10.01 3112
970 QR/바코드 스캐너 앱 샘플코드(ZXing, TFrameStand 사용) [1] 험프리 2017.08.04 3085
969 [따라하기] FireDAC으로 오라클(Oracle) DB와 연결하기 험프리 2015.03.24 3080
968 FireDAC 시작하기 Humphery 2014.09.23 2965
967 Developer Direct LIVE! 모바일 썸머 스쿨!! 관리자 2013.07.06 2959
966 안드로이드 SDK 설정 방법 file 험프리 2016.09.20 2912
965 [따라하기] 도서대여 프로그램 만들기 - 5, 도서대여 기능 개발 file 험프리 2017.02.02 2912
964 파이어몽키(FireMonkey) vs. VCL 관리자 2017.07.18 2883