|
안녕하세요 만해 입니다.
제가 만드는 프로그램의 중복 검사 루틴인데요
좀 속도가 느려서
어찌 좀 빠른 방법 없을까 해서 질문 드립니다.
방금 체크 해 보니깐 약 20초 가량 걸리네요
typedef struct {
AnsiString URL;
long Id;
long Depth;
bool IsVisited;
bool IsDuplicate;
}TTreeData;
void __fastcall TMain::ProcessUrl(void)
{// LinkString의 값을 가져와서 이미 저장되어 있는 TempStringList에
// 있는지 체크 있으면 제거 없으면 추가.
int i = 0;
int j = 0;
TTreeData* tData;
for ( i = 0 ; i < LinkString->Count ; i++ )
{
TTreeData * pData = (TTreeData*)LinkString->Items[i];
pData->URL = Make_Regular_Url(pData->URL);
AnsiString tmp = pData->URL;
for ( j = 0 ; j < TempStringList->Count ; j++ )
{
tData = (TTreeData*)(TempStringList->Items[j]);
tData->URL = Make_Regular_Url(tData->URL);
AnsiString tTmp = tData->URL;
if ( tTmp == tmp )
break;
}
if ( j >= TempStringList->Count )
// j >= TempStringList->Count 즉 중복되는 값이 없다면
pData->IsDuplicate = false;
else
{
pData->IsDuplicate = true;
pData->Id = tData->Id;
pData->Depth = tData->Depth;
}
TempStringList->Add(pData); // TempStringList에 추가.
}
}
전형적인 버블 소트 형태인데요
너무 느려서요
제 컴에서 20초면 다른 컴에서는 얼마나 걸릴지 (제 컴 P4 1.7Ghz인데도 20초나 걸려요 흑~)
고수님들의 도움 부탁 드립니다.
참 그리고 TempStringList하고 LinkString을 비교하면
처음에는 TempStringList가 LinkString보다 작지만
나중에 갈수록 TempStiringList가 LinkString보다 훨씬 커집니다.
도움 부탁 드릴께요~
|