Hallo. Es geht um Geschwindigkeitsoptimierung beim Durchsuchen einer Datei.
Für einen CallTipViewer soll eine knapp 4.000 Zeilen große Textdatei (au3.api) nach einem Begriff (Funktionsname) durchsucht werden. Die Datei kann bei Programmstart in den Speicher geladen werden und dort bleiben, um sie dann immer wieder mit einem anderen Begriff zu durchsuchen.
Aufbau der Datei
Die Datei hat in jeder Zeile eine Informationseinheit, die z. B. so aussieht:
MsgBox ( flag, "title", "text" [, timeout = 0 [, hwnd]] ) Zeigt eine einfache MessageBox mit optionaler Zeitbegrenzung an.
Der gesuchte Funktionsname steht in jeder Zeile am Anfang, was die Suche erleichtert. Im obigen Beispiel wäre "MsgBox" der Funktionsname. Ein Funktionsname kann in mehreren Zeilen vorkommen, z. B.
Opt ( "CaretCoordMode" ...
Opt ( "MustDeclareVars" ...
Mir sind folgende Vorgehensweisen eingefallen.
- Die Datei in den RAM laden und in einer Schleife jede Zeile prüfen, ob sie mit dem Suchbegriff beginnt.
- Die Datei in ein 1D Array laden und jede Zeile mit Array-Methoden prüfen, ob sie mit dem Suchbegriff beginnt. (Mir sind bekannt: _ArraySearch, _ArrayBinarySearch, und _ArrayFindAll.)
- Die Datei in ein 2D Array laden, wobei die erste Spalte die Funktionsnamen enthält. Bei der Suche nur die erste Spalte mit Array-Methoden prüfen.
- Die beiden oben genannten Array-Methoden, aber diesmal in einer Schleife jedes Element mit String-Funktionen durchsuchen (StringLeft, StringInStr, ...).
- Die Datei in eine MySQL Datenbank laden und durchsuchen. (Vielleicht ein wenig übertrieben?)
Gibt es hierbei große Geschwindigkeitsunterschiede bei verschiedenen Vorgehensweisen für die Suche, oder sind die nur im theoretischen Bereich? Wie würdet ihr das angehen?
Bernd.