지금 아래의 소스좀 봐주세요...
현재디렉토리의 화일과 몇가지 정보를 Explorer처럼
ListView를 이용해서 구현중인데...
한가지 문제가 있습니다.
너무 느려요... 이거 왜 이렇죠...??
윈도우의 explorer는 금방 화면에 보여주는데...
제건 약 400여 개의 화일및 디렉토리를 리스트뷰에 표시하는데,
약 30초가 걸립니다. 이거 왜이렇죠...
아래에 소스를 첨부합니다. 좀 봐주세요....
---------------------------------------
procedure TForm1.DispListView(Dir:string);
var
ListItem : TListItem;
SearchRec : TSearchRec;
RetCode : Integer;
begin
Screen.Cursor:=crHourGlass;
ListView1.Items.Clear;
ListView1.ViewStyle:=TViewStyle(vs);
if Dir[Length(Dir)] <> '' then
Dir:=Dir+'';
CurDir:=Dir;
RetCode:=FindFirst(Dir+'*.*',faAnyFile-faVolumeID,SearchRec);
while RetCode = 0 do
begin
ListItem:=ListView1.Items.Add;
// StatusBar1.SimpleText:=IntToStr(ListView1.Items.Count); //이걸로 카운트를 살펴보니 수가 높아질수록
//느려지더군요... ^^;
ListItem.Caption:=SearchRec.FindData.cFileName;
if (SearchRec.Attr = faDirectory) then
ListItem.ImageIndex:=0
else
ListItem.ImageIndex:=1;
// ListItem.StateIndex:=-1;
ListItem.SubItems.Add(FileSizeToStr(SearchRec.FindData.nFileSizeHigh,SearchRec.FindData.nFileSizeLow));
ListItem.SubItems.Add(FileTimeToStr(SearchRec.FindData.ftCreationTime));
ListItem.SubItems.Add(FileTimeToStr(SearchRec.FindData.ftLastWriteTime));
RetCode:=FindNext(SearchRec);
end;
Screen.Cursor:=crDefault;
end;
이것을 사용하면 더해지는 중간에는 업데이트가 내부에서 되고 EndUpdate가 되는순간 화면으로 뿌리게 됩니다. 속도가 빨라지죠. 많은양의 데이타를 ListView나 ListBox에 추가할 때 사용합니다.
아래코드에 제가 추가를 해 놓았으니 참고하세요.
김봉재 wrote:
> 지금 아래의 소스좀 봐주세요...
> 현재디렉토리의 화일과 몇가지 정보를 Explorer처럼
> ListView를 이용해서 구현중인데...
> 한가지 문제가 있습니다.
> 너무 느려요... 이거 왜 이렇죠...??
> 윈도우의 explorer는 금방 화면에 보여주는데...
> 제건 약 400여 개의 화일및 디렉토리를 리스트뷰에 표시하는데,
> 약 30초가 걸립니다. 이거 왜이렇죠...
> 아래에 소스를 첨부합니다. 좀 봐주세요....
> ---------------------------------------
> procedure TForm1.DispListView(Dir:string);
> var
> ListItem : TListItem;
> SearchRec : TSearchRec;
> RetCode : Integer;
> begin
> Screen.Cursor:=crHourGlass;
> ListView1.Items.Clear;
ListView1.Items.BeginUpdate // 여기를 잘 보세요.~~~~~~~~~~~~~~~~~~~~
> ListView1.ViewStyle:=TViewStyle(vs);
> if Dir[Length(Dir)] <> '' then
> Dir:=Dir+'';
>
> CurDir:=Dir;
> RetCode:=FindFirst(Dir+'*.*',faAnyFile-faVolumeID,SearchRec);
> while RetCode = 0 do
> begin
> ListItem:=ListView1.Items.Add;
> // StatusBar1.SimpleText:=IntToStr(ListView1.Items.Count); //이걸로 카운트를 살펴보니 수가 높아질수록
> //느려지더군요... ^^;
> ListItem.Caption:=SearchRec.FindData.cFileName;
> if (SearchRec.Attr = faDirectory) then
> ListItem.ImageIndex:=0
> else
> ListItem.ImageIndex:=1;
>
> // ListItem.StateIndex:=-1;
> ListItem.SubItems.Add(FileSizeToStr(SearchRec.FindData.nFileSizeHigh,SearchRec.FindData.nFileSizeLow));
> ListItem.SubItems.Add(FileTimeToStr(SearchRec.FindData.ftCreationTime));
> ListItem.SubItems.Add(FileTimeToStr(SearchRec.FindData.ftLastWriteTime));
>
> RetCode:=FindNext(SearchRec);
> end;
> Screen.Cursor:=crDefault;
ListView1.Items.EndUpdate; // 여기도 잘 보세요~~~~~~~~~~~~~~~~~~~~~
> end;
>