Sven Rautenberg: opendir und readdir Ressourcenfresser?

Beitrag lesen

Moin!

Unglücklich finde ich den Ansatz alles in ein
oder zwei Arrays zu packen. Das kostet Unmengen RAM.
Was wäre da besser? Mehr Elemente in einem Array oder mehr Arrays für weniger Elemente?

Der Ansatz mit dem Array ist in meinen Augen sehr gut. Filesystemoperationen benötigen immer wesentlich mehr Zeit und wirken sich insbesondere auf einem Shared Server negativ auf alle anderen parallelel Prozesse aus, die ebenfalls Festplattenzugriffe ausführen wollen, so dass man Ergebnisse in jedem Fall zwischenspeichern sollte.

Und auch was die Datenmengen angeht, sind Arrays mit Sicherheit nicht die Übeltäter hier. Was wollen wir mal annehmen? 1.000 Dateien insgesamt? Mit jeweils 64 Zeichen langen Dateinamen. Macht an Datenmenge ungefähr 64 Kilobyte, vielleicht zusammen mit Verwaltungsinformationen für das Array 128 Kilobyte.

So ein Zwischenspeicher macht natürlich nur Sinn, wenn man diese Informationen danach noch mehrfach benötigt. Ein simples Directorylisting sollte sowas nicht erfordern.

Nun, du sagtest, dass das Array mit den Dateien mit foreach
verarbeitet werden würde, es liegt also nahe komplett ohne Arrays
auszukommen: Stichwort Rekursion.

Rekursionen sind zwar für rekursive Probleme gerne genommen, haben aber ebenfalls das Problem, je nach Aufgabe verhältnismäßig viel Speicher zu verbrauchen - in diesem Fall aber nicht als Array, sondern auf dem Stack.

Arrays brauchen nunmal Speicher und wenn du tausende von
Unterverzeichnissen verarbeiten würdest, geht das auf den Speicher.

Wenn du tausende von Unterverzeichnissen per Rekursion verarbeitest, geht das ganz genauso auf den Speicher. :)

- Sven Rautenberg