Hi,
ich habe mir ein kleines Musik-Verwaltungstool gebastelt, dass die Dateien in einem Ordner sucht und die Informationen in einem neuen Datensatz in einer Datenbank speichert (Name, Pfad, einige ID3-Tags, ggf. Cover).
Wenn ich die Suche starte, läuft das Programm noch sehr schnell, es werden so ca. 20-40 Datensätze pro Sekunde eingefügt.
Doch ab 5000 etwa wird es sehr langsam und am Ende braucht das Tool 1-2 Sekunden pro Datensatz. Das Taskmanager zeigt an, dass der Prozess sqlservr.exe einen virtuellen Speicher von etwa 500.000k hat.
Ich hab es auf meinem Laptop (WinXP - SP2, 2 GHz, 512 MB
Ram) laufen.
Hier nochmal kurz der Code, wie ich die Datensätze erstelle, der immer aufgerufen wird, wenn das Programm eine mp3-Datei gefunden hat.
Delphi-Quellcode:
try
if MSTable_Wrk.Locate('Pfad', FileName, [loCaseInsensitive]) then
begin
MSTable_Wrk.Edit;
Inc(ChangedFiles);
end
else
begin
MSTable_Wrk.Append;
Inc(NewFiles);
end;
if Assigned(OnTTDProgress) then
OnTTDProgress(self, NewFiles, ChangedFiles);
with MSTable_Wrk do
begin
FieldValues['Pfad'] := FileName;
FieldValues['Name'] := StringReplace(ExtractFileName(FileName), ExtractFileExt(FileName), '', []);
FieldValues['Ordner'] := ExtractFilePath(FileName);
FTyp := LowerCase(ExtractFileExt(FileName));
if (Pos('.', FTyp) > 0) then
FTyp := Copy(FTyp, 2, Length(FTyp) - 1);
FieldValues['Typ'] := FTyp;
FGroesse := FormatFloat('0 B', Dateigroesse);
if (Dateigroesse DIV 1024 > 0) then
FGroesse := FormatFloat('#,##0.00 KB', Dateigroesse / 1024);
if (Dateigroesse DIV 1048576 > 0) then
FGroesse := FormatFloat('#,##0.00 MB', Dateigroesse / 1048576);
if (Dateigroesse DIV 1073741824 > 0) then
FGroesse := FormatFloat('#,##0.00 GB', Dateigroesse / 1073741824);
if ((Dauer MOD 60) > 9) then
FDauer := IntToStr(Dauer DIV 60) + ':' + IntToStr(Dauer MOD 60)
else FDauer := IntToStr(Dauer DIV 60) + ':0' + IntToStr(Dauer MOD 60);
FieldValues['Groesse'] := FGroesse;
FieldValues['Interpret'] := Artist;
FieldValues['Titel'] := Titel;
FieldValues['Album'] := Album;
FieldValues['Jahr'] := Year;
FieldValues['Genre'] := Genre;
FieldValues['Lyrics'] := Lyrics;
FieldValues['Dauer'] := FDauer;
FieldValues['Bitrate'] := Bitrate;
FieldValues['Vbr'] := Vbr;
FieldValues['ChannelMode'] := ChannelMode;
FieldValues['Samplerate'] := Samplerate;
FieldValues['Schreibgeschuetzt'] := FReadOnly;
FieldValues['Versteckt'] := FHidden;
FieldValues['Erstelldatum'] := Created;
JvDBImage1.Picture.Assign(JvID3v21.Images.Pictures.CoverFront);
Post;
end; (* of with *)
JvID3v21.Active := False;
except
//
end;
Gibt es eine Möglichkeit die Suche + Erstellung der Datensätze dauerhaft mit der Geschwindigkeit wie zu Beginn auszuführen?
P.S.: Die MSTable_Wrk-Komponente ist
nicht mit einer visuellen Komponente verknüpft.
Vielen Dank und freundliche Grüße
Lorenz
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.
George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler