Delphi-PRAXiS
Seite 3 von 5     123 45      

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)

Satty67 27. Okt 2010 21:33

AW: Indizierung von Dateien
 
Denke Speicher ist kein Problem, eher die Zahl der Dateien (40.000 Stk). Wäre das ganze eine Datei mit der gleichen Datenmenge, wären es auch ohne prefetch/cache immer fix erledigt.

Denke selbst mit Verteilung auf Threads wird Windows & AntiVirus beim ersten Zugriff auf eine Datei immer ausbremsen.

Die Quellen gleich von Anfang an anders zu speichern (z.B. in Datenbank) ist keine Option?

juergen 27. Okt 2010 21:34

AW: Indizierung von Dateien
 
Zitat:

Zitat von -187- (Beitrag 1058252)
Wieviel Arbeitsspeicher brauch mein Programm ? Gute Frage, wie kann ich das genau messen ? *fg*

Für den Anfang kannst du ja im Taskmanager nachschauen wieviel Arbeitsspeicher deine Anwendung nutzt.

Was ist mit XMLSource.LoadFromFile(FilePath) und XMLSource.Clear...

-187- 27. Okt 2010 21:37

AW: Indizierung von Dateien
 
Zitat:

Zitat von juergen (Beitrag 1058257)
Was ist mit XMLSource.LoadFromFile(FilePath) und XMLSource.Clear...

Was soll damit sein ?

Zum Arbeitsspeicher..naja so 5000-6000 k, also ganz normal...

Ich dachte eigentlich Anfangs das eine DB Anwendung überdimensioniert wäre. Naja das Programm ist fertig und ich bin nicht so begeistert von der Idee umzurüsten :)

Satty67 27. Okt 2010 21:39

AW: Indizierung von Dateien
 
Zitat:

Zitat von juergen (Beitrag 1058257)
XMLSource.LoadFromFile(FilePath) und XMLSource.Clear...

Beides gleichzeitig ist natürlich unnötig.

Aber denke alleine die Tatsache, dass der zweite Zugriff nur noch <= 1 Sekunde dauert, lässt kaum Hoffnung, dass durch Code-Optimierung viel zu machen ist. Sein Problem sind ja die 10+ Minuten beim ersten Zugriff.

Zitat:

Zitat von -187- (Beitrag 1058258)
Ich dachte eigentlich Anfangs das eine DB Anwendung überdimensioniert wäre. Naja das Programm ist fertig und ich bin nicht so begeistert von der Idee umzurüsten :)

40.000 Dateien = Datensätze wäre zumindest ein Wert, wo man darüber nachdenken könnte. Ist natürlich nicht so leicht zu erweitern, wie eine XML-Datei in Suchordner zu kopieren.

Wenn alles XML ist, evtl. eine einzelne Datei mit je einer Zeile pro XML-Datei (XML braucht ja kein CRLF, Zeile: Dateiname?XML-Code). Aber wenn das gelesen wird, kommt sicher gleich der Aufschrei, dass genau so eine Idee förmlich nach einer DB bettelt.

-187- 27. Okt 2010 21:41

AW: Indizierung von Dateien
 
Gibt es denn ne Möglichkeit den aktuellen Windows Cache zu speichern und bei jedem Neustart wiederherzustellen ;)

juergen 27. Okt 2010 21:52

AW: Indizierung von Dateien
 
Das seh ich erst jetzt: :wall:
40.000 Dateien von Festplatte lesen...

Hier sah das für mich noch ganz anders aus:

Zitat:

Zitat von -187- (Beitrag 1058211)
Oops, ja hab ich natürlich vergessen zu erwähnen. Der Code sieht in etwa so aus:

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;

Wo sind deine Daten? Im Memo oder wirklich als Dateien einzulesen?

-187- 27. Okt 2010 21:54

AW: Indizierung von Dateien
 
Die Daten sind in den XML Files und werden jedesmal eingelesen. Im Memo stehen nur die Dateinamen (Ohne Endung) ... ;)

Satty67 27. Okt 2010 22:02

AW: Indizierung von Dateien
 
Zitat:

Zitat von -187- (Beitrag 1058260)
Gibt es denn ne Möglichkeit den aktuellen Windows Cache zu speichern und bei jedem Neustart wiederherzustellen ;)

Per Systemeinstellung... glaube ich nicht Die Größe lässt sich einstellen, ist aber dann nur ein größerer leerer Cache beim Start. Alternativ Suspend-to-disk, statt ausschalten. :stupid:

-187- 27. Okt 2010 22:06

AW: Indizierung von Dateien
 
Ach ich nehm die 10min erstmal so hin... Mir bleibt ja auch nichts anderes überig wenn ich nicht umbauen will :)

Luckie 27. Okt 2010 23:43

AW: Indizierung von Dateien
 
Damit wirst du leben müssen. 40.000 Dateien sind schon ziemlich viel und wenn sie alle nicht sehr groß sind, wird die Festplatte erst mal ordentlich beschäftigt sein, sie alle zusammen zu suchen und zu lesen. Da hilft nur eine gut defragmentierte Festplatte, damit der Lesekopf nicht ständig hin und her springen muss. Aber zu viel würde ich mir davon nicht versprechen. Der Festplattenzugriff ist nun mal der Flaschenhals.

Wenn du die Möglichkeit hast, kannst du die Dateien ja mal auf einen Rechner mit einer SSD Platte (Also diese Festplatten ohne Scheiben, aber mit Flashspeicher.) kopieren und dann noch mal dein Programm drüberlaufen lassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:36 Uhr.
Seite 3 von 5     123 45      

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