Add 속도는 Hash 를 만들 필요가 있는 THashedStringList 가 느림.
IndexOf 의 경우 최초검색시에는 THashedStringList 가 느리게 나왔지만
그 이후부터는 TStringList 보다 훨씬 빨랐다.
천만개의 데이터를 대상으로 IndexOf 를 통한 검색.
폼에 라디오버튼 2개를 박고, 버튼 하나, 결과를 출력할 TMemo 하나를 넣고 실험.
implementation 아래 부분을 아래와 같이 해놓고 테스트.
uses
IniFiles;
IniFiles;
const
MAX=10000000;
MAX=10000000;
var
i: Integer;
sList: TStringList;
hsList: THashedStringList;
i: Integer;
sList: TStringList;
hsList: THashedStringList;
// 버튼을 누르면 라디오버튼의 선택에 따라 속도비교
procedure TForm1.btnCheckClick(Sender: TObject);
var
시작시간: DWORD;
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
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;
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;
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);
finalization
FreeAndNil(sList);
FreeAndNil(hsList);
'Delphi' 카테고리의 다른 글
[BDS] 찾기 기능 Ctrl + Shift + Enter (0) | 2009.04.18 |
---|---|
[Delphi] 절대 죽지 않는 불사신 어플리케이션 제작법 (0) | 2009.04.18 |
[Delphi] 도메인 이름으로 IP주소 가져오기 (0) | 2009.04.18 |
[Delphi] THashStringList (대용량 문자열 저장/검색) (0) | 2009.04.18 |
예외 (Exception) 모음 (0) | 2009.04.18 |