Rolf B: NTFS vs. FAT

Beitrag lesen

Hallo Martin,

Nach dem muss man die Tabelle beim Directory Scan filtern.

Ich habe das so verstanden, dass die Directories ihre eigenen B-Trees haben, als secondary Index, so dass man ein Verzeichnis mittels indexsequenziellem Zugriff lesen kann, bzw. mit reinem Index-Scan, solange man nur auf Namen filtert (bzw. nur Namen auflistet).

D.h. ein MFT full table Scan, um ein Dir aufzulisten, ist nicht erforderlich. Da die MFT zu Beginn 12.5% der Platte einnimmt und von da an noch wachsen kann, könnte das eeetwas lange brauchen.

Den Unterschied merkt man auf der Befehlszeile, bspw. in der Powershell. Der Ordner C:\Windows\WinSXS ist riesig (18000 Ordner). Wenn ich dort "dir" aufrufe (oder Get-ChildItem auf powershellisch), dauert es ca 800ms, bis der Inhalt eingefangen ist. Natürlich fange ich ihn in einer Variablen, das Ausgeben auf die Konsole würde die Messung verfälschen. Statt dessen kann ich auch cmd /c dir aufrufen, dann bekomme ich kein Array von FileSystemInfo Objekten, sondern ein String[] als Capture der Konsolenausgabe und es dauert 450ms. Damit verzichte ich aber auf den Vorteil von Powershell - eine objektorientierte Pipeline.

Ich kann aber auch - weil Powershell ja eine .net Shell ist - die GetFileSystemEntries Methode der System.IO.Directory Klasse nutzen. Die liefert nur die Namen, d.h. geht NUR über den Directory Index, und ist in 50ms fertig. Sechzehnmal schneller.

Im Normalfall fällt es natürlich kaum auf. Aber wir sprachen ja von pathologischen Fällen mit VIELEN Einträgen.

Rolf

--
sumpsi - posui - obstruxi