![]() |
AW: Indizierung von Dateien
Zitat:
![]() |
AW: Indizierung von Dateien
gnaaaaaaah.... :wall:
|
AW: Indizierung von Dateien
und vor allem fehlt auch noch die Zeile in der die beschreibende Datei geladen wird. Wenn du eine StringList erzeugst, ist sie normalerweise leer. Dann brauchst du darin auch nicht nach Inhalten zu suchen.
Bernhard |
AW: Indizierung von Dateien
Zitat:
Also hier nochmal der Code in vereinfachter Form:
Code:
var
XMLSource, IDList: TStringList; FoundCount: Integer; begin XMLSource:=TStringList.Create; IDList:=TStringList.Create; IDList.Text:=Memo1.Text; try for i:=0 to IDList.Count-1 do begin FilePath:=ExtractFilePath(ParamStr(0))+IDList.Strings[i]+'.xml'; XMLSource.LoadFromFile(FilePath); if Pos('MyString',XMLSource.Text)>0 then Inc(FoundCount); XMLSource.Clear; end; finally IDList.Free; XMLSource.Free; end; end; |
AW: Indizierung von Dateien
So ich habe es nochmal genauer ausgearbeitet und gemessen:
Ohne Cache: 9:22 min Mit Cache: 0:01 min Und hier noch der benutzte Source Code:
Code:
Was kann man da Speed technisch noch machen ? Also ohne Cache dauert mir das zu lange...
procedure TForm1.Button1Click(Sender: TObject);
var StartTime, EndTime: TDateTime; XMLSource, IDList: TStringList; i, FoundCount: Integer; FilePath, FileName: String; begin XMLSource:=TStringList.Create; IDList:=TStringList.Create; IDList.Text:=Memo1.Text; StartTime:=Time; try for i:=0 to IDList.Count-1 do begin FileName:=IDList.Strings[i]; FilePath:=ExtractFilePath(ParamStr(0))+'XML\'+Copy(FileName,Length(FileName)-1,Length(FileName))+'\'+FileName+'.xml'; if FileExists(FilePath) then begin XMLSource.LoadFromFile(FilePath); if Pos('MyString',XMLSource.Text)>0 then Inc(FoundCount); XMLSource.Clear; end; end; finally IDList.Free; XMLSource.Free; end; EndTime:=Time; ShowMessage(IntToStr(FoundCount)+' Time: '+TimeToStr(EndTime-StartTime)); end; |
AW: Indizierung von Dateien
Hallo,
so ganz steig ich auch nicht durch. Nach dem laden der TStringList (IDList) würde ich in 2 Schleifen arbeiten. In der 1. Schleife die Datei in XMLSource zusammenbasteln. Dann in der 2. Schleife das Pos in der IDList anwenden, oder musst du in der XMLSource suchen? In IDList wäre es etwas schneller weil der jeweilige String kleiner ist. Du rufst im Moment in der Schleife jedesmal XMLSource.LoadFromFile(FilePath) auf und löschst diese auch wieder. Ob das gut ist? 40.000 Datensätze sollten in wenigen Sekunden(?) durch sein, auch beim ersten Mal, aber nur wenn du direkt in der TStringList suchst und die Oberfläche von den Daten trennst. Wieviel Arbeitsspeicher verbrauchst du mit deinen Daten? |
AW: Indizierung von Dateien
@-187-
der Code sieht KISS aus, sollte IMHO flott durchlaufen, was für Datenmengen bewegst Du hierbei insgesamt? |
AW: Indizierung von Dateien
Nein, ich muss in XML Source suchen. IDList stellt nur die Dateinamen die ich lade zur Verfügung. Du kannst ja meinen letzten Code nochmal überfliegen dann sollte es klar sein.
Wieviel Arbeitsspeicher brauch mein Programm ? Gute Frage, wie kann ich das genau messen ? *fg* |
AW: Indizierung von Dateien
Zitat:
|
AW: Indizierung von Dateien
also ca. 160 MB nicht Welt ...
Stringstreams statt Stringlisten für die innere Schleife werden hier auch nicht bringen, wenn es beim zweiten Durchlauf flott läuft. Du siehst mich ratlos, sorry, flotte Platte, defragmetieren, Virenscanner die üblichen Verdächtigen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz