Thema: Delphi Code Optimierung

Einzelnen Beitrag anzeigen

TheReaper

Registriert seit: 27. Feb 2003
Ort: chemnitz
90 Beiträge
 
Delphi 2005 Personal
 
#1

Code Optimierung

  Alt 22. Okt 2004, 15:31
Hallo DP!

Ich habe einen Algorithmus geschrieben um Datein in einem angegebenen Verzeichnis und Unterverzeichnissen zu Suchen. Der Code Funktioniert sehr gut, aber wenn es eine hohe Anzahl an dateien ist (>2000) dauert es sehr sehr lange (>10 min bei XP2100+, ATA133 HDD) bis alles durchsucht wurde.

Code:
procedure GetFilesInDirectoryMP3(ADirectory: string; AMask: String; ARekursiv: Boolean);
var
SR: TSearchRec;
Value, M, S : Integer;
begin
if (ADirectory<>'') and (ADirectory[length(ADirectory)]<>'\') then
ADirectory:=ADirectory+'\';

if (FindFirst(ADirectory+AMask,faAnyFile-faDirectory,SR)=0) then
begin
repeat
if (SR.Name<>'.') and (SR.Name<>'..') and (SR.Attr<>faDirectory) then

//ID3Tags, speichern ... einfügen

  MP3.Execute(ADirectory+SR.Name);

  if MP3.ID3v2TLEN<>'' then
     begin
     Value := Trunc(strtoint(mp3.ID3v2TLEN) / 1000);
     M := (value mod 3600) div 60;
     S := (value mod 3600) mod 60;
  end else begin
     Value := Trunc(mp3.spielzeit);
     M := (value mod 3600) div 60;
     S := (value mod 3600) mod 60;
  end;

  mp3liste.Artist:='+ '+MP3.ID3v2TPE1;
  mp3liste.Album:=MP3.ID3v2TALB;
  mp3liste.Titel:=MP3.ID3v2TIT2;
  mp3liste.Genre:=mp3.ID3v2TCON;
  mp3liste.Zeit:=Format('%2.2d:%2.2d', [M, S]);
  mp3liste.TrackNr:=MP3.ID3v2TRCK;
  mp3liste.Dateiname:=SR.Name;
  mp3liste.Pfad:=ADirectory;
  write(f3,mp3liste);


until FindNext(SR)<>0;
FindClose(SR);
end;

// Unterverzeichnis durchsuchen
if ARekursiv then
if (FindFirst(ADirectory+'*.*',faDirectory,SR)=0) then
begin
repeat
  if (SR.Name<>'.') and (SR.Name<>'..') then
    GetFilesInDirectoryMP3(ADirectory+SR.Name,AMask,True);
until FindNext(SR)<>0;
FindClose(SR);
end;
end;
Meine Frage: Hat jemand eine Idee wie den Code schneller machen kann?
  Mit Zitat antworten Zitat