Add 속도는 Hash 를 만들 필요가 있는 THashedStringList 가 느림.
IndexOf 의 경우 최초검색시에는 THashedStringList 가 느리게 나왔지만
그 이후부터는 TStringList 보다 훨씬 빨랐다.
 
천만개의 데이터를 대상으로 IndexOf 를 통한 검색.
 
 
폼에 라디오버튼 2개를 박고, 버튼 하나, 결과를 출력할 TMemo 하나를 넣고 실험.
implementation 아래 부분을 아래와 같이 해놓고 테스트.
 
uses
  IniFiles;
 
const
  MAX=10000000;
 
var
  i: Integer;
  sList: TStringList;
  hsList: THashedStringList;
 
 
// 버튼을 누르면 라디오버튼의 선택에 따라 속도비교
procedure TForm1.btnCheckClick(Sender: TObject);
var
  시작시간: DWORD;
begin
  // TStringList
  if rdoStringList.Checked then begin
    시작시간:=GetTickCount;
    Memo1.Lines.Add(IntToStr(sList.IndexOf(IntToStr(Random(MAX)))));
    Memo1.Lines.Add(FloatToStr((GetTickCount-시작시간)/1000));
  end
  // THashedStringList
  else begin
    시작시간:=GetTickCount;
    Memo1.Lines.Add(IntToStr(hsList.IndexOf(IntToStr(Random(MAX)))));
    Memo1.Lines.Add(FloatToStr((GetTickCount-시작시간)/1000));
  end;
end;

 
// 시작시 각 리스트를 생성하고 자료를 집어넣음
initialization
  sList:=TStringList.Create;
  hsList:=THashedStringList.Create;
  for i:=0 to MAX do begin
    sList.Add(IntToStr(Random(i)));
    hsList.Add(IntToStr(Random(i)));
  end;
 
// 해제
finalization
  FreeAndNil(sList);
  FreeAndNil(hsList);
 





Posted by bloodguy
,