Hallo zusammen,
ich muss auf verschiedenen PCs Dateien Indexieren und gewisse Dinge damit erledigen.
Manchmal brauche ich nur einige dutzend Dateien, manchmal aber mehrere 100'000!
Eigentlich wäre für mich das Scripting.Dictionary optimal geeignet, da ich schnell Schlüssel mit jeweils einem Wert hinzufügen muss und im Anschluss prüfen muss, ob ein bestimmter Schlüssel existiert!
Ich muss also nicht nur schnell hinzufügen können, sondern auch schnell auf Existenz eines Schlüssels prüfen!
Soweit so gut.
Ich verwende mal folgenden Code auf meinem (momentan) langsamen Rechner:
$oDictionary = ObjCreate("Scripting.Dictionary")
If @error Or Not IsObj($oDictionary) Then Exit MsgBox(0,"Fehler", "Objekt konnte nicht erstellt werden")
$Timer = TimerInit()
For $i = 0 To 100000
$oDictionary.Add($i, "Teststring")
Next
$End = TimerDiff($Timer)
MsgBox(0,"Dauer", Round($End, 2) & "ms")
Damit dauert das hinzufügen (auf meinem Rechner) von 100'000 Datensätzen ca. 600ms
Wenn ich nun aber 1 Million Datensätze hinzufüge, dauert das nicht 10x so lange, also ca. 6 Sekunden, sondern fast 100x so lange (50-60 Sekunden!)
Das ist natürlich für mich nicht geeignet.
Aber was wäre schneller?
Ich habe es schon mit ArrayList, Hashtable, Queue und Stack versucht. (MSDN Link)
Leider sind diese alle bei bis zu 600'000 Datensätzen langsamer als das Scripting.Dictionary. Dafür sind sie darüber massiv schneller!
Was für eine Methode könnte ich verwenden, um bei 1 - 20 Millionen Objekten "am schnellsten" zu sein? (Natürlich immer noch in AutoIt). Wäre eine SQLite Datenbank schneller? (Habe noch nie etwas mit Datenbanken gemacht!)
Ich sage bewusst bis 20 Millionen Einträge, weil ich die AutoIt internen Arrays nicht benutzen möchte. (Obwohl diese - direkt adressiert - am schnellsten sind.)
In einigen Fällen habe ich eben wirklich mehr als 16 Millionen Objekte!
Vielen Dank für Eure Hilfe!
Veronesi