Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Viele Dateien performant einlesen

  Alt 28. Apr 2014, 11:12
Ich habe eine Vielzahl (ein paar Tausend) CSV-Dateien. Die möchte ich allesamt auswerten.

Der naive Ansatz
  1. Datei einlesen mit TStrings::LoadFromFile(..)
  2. Datei zerstückeln mitmyStrings.Split(..)
  3. Eventuell weitere Verarbeitung

funktioniert auch bestens. Es dauert aber zu lange. Bei ca. 5000 Dateien zu 24 KB braucht das Delphi-Programm auf meinem System (mit SSD) ca. 45 Sekunden.

Der Flaschenhals ist eindeutig (und überraschenderweise) TStringList::LoadFromFile . Lade ich genau die gleiche Datei ein zweites mal ein, ist das in "Null Millisekunden" getan.

Es wird also technisch:
  • Windows
  • NTFS-Dateisystem. Clustergröße wahrscheinlich fest 512 Bytes.
  • Eine Menge von Dateien im gleichen Verzeichnis möglichst schnell in den Speicher befördern

Was muss ich tun? Gibt es etwas, um alle Dateien einmal am Stück zu holen? Windows' Memory Mapped Files habe ich bislang immer nur für das Gegenteil- Viele, andauernde Operationen auf großen Dateien gehört...
  Mit Zitat antworten Zitat