AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Indizierung von Dateien

Ein Thema von -187- · begonnen am 27. Okt 2010 · letzter Beitrag vom 2. Nov 2010
Antwort Antwort
Seite 2 von 5     12 34     Letzte » 
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#11

AW: Indizierung von Dateien

  Alt 27. Okt 2010, 20:04
*g*

Jetzt fehlt nur noch der Teil, in welchem du nach dem string suchst.
Schau mal in #7
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#12

AW: Indizierung von Dateien

  Alt 27. Okt 2010, 20:10
gnaaaaaaah....
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#13

AW: Indizierung von Dateien

  Alt 27. Okt 2010, 20:20
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
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#14

AW: Indizierung von Dateien

  Alt 27. Okt 2010, 20:47
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
Versteh nicht was du mir damit sagen willst ?!

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;

Geändert von -187- (27. Okt 2010 um 20:58 Uhr)
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#15

AW: Indizierung von Dateien

  Alt 27. Okt 2010, 21:18
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:
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;
Was kann man da Speed technisch noch machen ? Also ohne Cache dauert mir das zu lange...
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.164 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Indizierung von Dateien

  Alt 27. Okt 2010, 21:19
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?
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#17

AW: Indizierung von Dateien

  Alt 27. Okt 2010, 21:25
@-187-
der Code sieht KISS aus, sollte IMHO flott durchlaufen, was für Datenmengen bewegst Du hierbei insgesamt?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#18

AW: Indizierung von Dateien

  Alt 27. Okt 2010, 21:25
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*
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#19

AW: Indizierung von Dateien

  Alt 27. Okt 2010, 21:26
@-187-
der Code sieht KISS aus, sollte IMHO flott durchlaufen, was für Datenmengen bewegst Du hierbei insgesamt?
40.000 Dateien, der Durchschnitt liegt bei 3-4 kb pro Datei.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#20

AW: Indizierung von Dateien

  Alt 27. Okt 2010, 21:32
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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:25 Uhr.
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