Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Indizierung von Dateien (https://www.delphipraxis.net/155531-indizierung-von-dateien.html)

-187- 27. Okt 2010 14:57

Indizierung von Dateien
 
Moin,

ich habe mal eine Frage bezüglich Windows 7 und der Indizierung von Dateien.

Mein Programm überprüft ob ein String in einer XML Datei vorkommt. Mit einer Schleife überprüfe ich so 40.000 Dateien. Wenn ich diese Dateien frisch erstelle und dann mein Programm laufen lassen, dauert die Überprüfung 20 Minuten. Wenn das Programm allerdings einmal durch ist und ich erneut eine Suche starte, dann dauert die Überprüfung nur noch 20 Sekunden.

Mein Programm ist sehr simpel und benutzt keine Index Tabelle, daher muss das an der Windows Indizierung liegen. Kann mir das jemand ganauer erklären ?

bYe

chaosben 27. Okt 2010 15:00

AW: Indizierung von Dateien
 
Also wenn du nicht die Routinen der Windows-Suche benutzt, nutzt du die Windows-Indizierung auch nicht.
Warum dein Programm beim 2. Mal so schnell durch ist, kann ich dir nicht sagen. Aber das wird wohl eher an deinem Code als an Windows liegen. :)

Mithrandir 27. Okt 2010 15:02

AW: Indizierung von Dateien
 
Ich glaube nicht, dass das mit dem Indexdienst von Windows zusammenhängt. Ich denke eher, dass hier die Adressen der einzelnen Dateien (ggf. auch die Dateien selbst, wenn sie nicht zu groß sind) im Cache (lies: Arbeitsspeicher) vorgehalten werden.

@chaosben: Möp? :gruebel: Eigentlich ist das doch ne bekannte Eigenart, dass Windows Dateiteile, auf die gerade zugegriffen wurde, im RAM hält...

Daniela.S 27. Okt 2010 15:03

AW: Indizierung von Dateien
 
Deine XML Datei wird bei zweiten Mal im Chache, also im RAM, liegen und somit nicht noch einmal von der Festplatte geladen werden.

Mithrandir 27. Okt 2010 15:09

AW: Indizierung von Dateien
 
Und wenn man das mal schnell überschlägt und 5 kB pro Datei veranschlagt, dann kommt man auf 200 MB, was ja nun nicht wirklich viel ist. Insofern isses wahrscheinlich, dass der ganze Rotz einfach im Arbeitsspeicher bleibt. Irgendwann werden die Bereiche dann wieder zum Überschreiben freigegeben. Wenn du jetzt nochmal dein Programm startest, weiß Windows, dass die Dateien noch im RAM sind und du bekommst n Geschwindigkeitsrausch. :cyclops:

chaosben 27. Okt 2010 15:23

AW: Indizierung von Dateien
 
Ja gut ... ich dachte auch erst an den Cache habe aber nicht nur 5k pro Datei veranschlagt ... egal.

Ja, der Cache könnte es theoretisch sein.

Du könntest das mit diesem Code gegenprüfen.

-187- 27. Okt 2010 18:04

AW: Indizierung von Dateien
 
Hm Okay das ist ja jetzt blöd wenn das jedesmal 20 Minuten dauert.

Hat jemand ne schnellere Lösung 40.000 Dateien zu durchsuchen als diese:

Code:
for i:=0 to MyFiles.Count-1 do
begin
  if Pos('MyString',MyFiles.Strings[i])>0 then do
    do something...
end;

Sir Rufo 27. Okt 2010 18:12

AW: Indizierung von Dateien
 
Zitat:

Zitat von -187-;
Hm Okay das ist ja jetzt blöd wenn das jedesmal 20 Minuten dauert.

Hat jemand ne schnellere Lösung 40.000 Dateien zu durchsuchen als diese:

Code:
for i:=0 to MyFiles.Count-1 do
begin
  if Pos('MyString',MyFiles.Strings[i])>0 then do
    do something...
end;

Ist das der Teil, der so lange braucht? ME fehlt der Teil, wo die Dateien geladen werden

-187- 27. Okt 2010 19:13

AW: Indizierung von Dateien
 
Oops, ja hab ich natürlich vergessen zu erwähnen. Der Code sieht in etwa so aus:

Code:
  XMLSource:=TStringList.Create;
  try
    for i:=0 to IDList.Count-1 do
    begin
      FilePath:=ExtractFilePath(ParamStr(0))+IDList.Strings[i]+'.xml';
      XMLSource.LoadFromFile(FilePath);
      //Hier verarbeite ich den Source
      XMLSource.Clear;
    end;
  finally
    IDList.Free;
    XMLSource.Free;
  end;

Mithrandir 27. Okt 2010 19:48

AW: Indizierung von Dateien
 
*g*

Jetzt fehlt nur noch der Teil, in welchem du nach dem string suchst. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 Uhr.
Seite 1 von 5  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz