Get All Files from Directory

Eigentlich wollte ich die fünf neuesten Dateien aus einem Verzeichnis lesen. Ich verwende seit langer Zeit mit VB.NET die GetFiles Methode. Diese liefert aber nur einen Liste von Strings unsortiert. Benötigt wird aber das Dateidatum. Also auf und in etwa folgendes gesucht “vb.net getfiles order by date”.

Die Antworten haben mich dann sensibilisiert. Auf welche Art greift das Betriebssystem auf die Festplatte zu. Der Code soll in einer Website genutzt werden und da spielt Performance eine gewichtige Rolle. Also zwei Code Varianten erstellt und die Geschwindigkeit gemessen.

Zuerst mein bisheriger Code

   1:  Dim watch2 = System.Diagnostics.Stopwatch.StartNew()
   2:   
   3:  Dim files = My.Computer.FileSystem.GetFiles(
Context.Server.MapPath("/content"),
FileIO.SearchOption.SearchAllSubDirectories, {"*.content"})
   4:   
   5:  watch2.Stop()

 

Dann eine andere Variante

   1:  Dim watch = System.Diagnostics.Stopwatch.StartNew()
   2:  Dim Directories As New IO.DirectoryInfo(
Context.Server.MapPath("/content"))
   3:  Dim fileInfo = Directories.GetFiles("*.content", 
IO.SearchOption.AllDirectories)
   4:  watch.Stop()

 

Es sind 155 Dateien, die Festplatte ist eine SSD. Die Ausführungsdauer liegt in mehreren Durchläufe zwischen 2 und 17ms. Variante 2 war immer schneller, teilweise mehr als doppelt so schnell. Dabei liefert Variante 2 sogar komplexe Objekte vom Typ FileInfo samt den Property FileCreationDate, so das per Linq bequem und Performant sortiert werden kann

files.OrderBy(Function(x) x.CreationTime).Take(6)

Kommentare sind geschlossen