IsEmpty() performance?
-
heiho
geht das performanter oder ist es das schon? (bei zb sehr grossen verzeichnissen)
bool IsEmpty(string path) { if(Directory.GetDirectories(path).Length > 0) return false; else if(Directory.GetFiles(path).Length > 0) return false; return true; }
-
Performanter nicht, wohl aber kürzer und prägnanter:
public static bool IsEmpty(this DirectoryInfo path) { return path.GetDirectories().Length == 0 && path.GetFiles().Length == 0 } public static bool IsEmpty(string path) { return new DirectoryInfo(path).IsEmpty(); }
-
das man es als extension method machen kann ist mir schon klar - das war auch nicht die frage {o;
mir ging es nur darum ob man performanter abfragen kann ob ein verzeichnis leer ist oder nicht - denn mit GetDirectories und consorten werden ja bereits zwei listen generiert welche dann verworfen werden
und bei einem verzeichnis mit mehreren tausend dateien und/oder verzeichnissen ist das nicht lustig /=
-
Sucht du eine Lösung ohne PInvoke, oder darf es auch mit sein?
Ob es im .NET Framework eine Möglichkeit gibt weiss ich nicht (müsste ich erstmal suchen), mit PInvoke geht es garantiert (FindFirstFile/FindNextFile).Du könntest auch mal im Win32 Namespace gucken wenn du im Framework nix findest, da gibt's einige ganz nette Dinge.
Wenn du was gefunden hast was du für schneller hältst probier es aus, wenn es nix bringt verwirf es und verwende die Version die du gepostet hast (weil die vermutlich einfacher zu verstehen ist).
-
BTW: schlechter Name. Die Funktion sollte besser "IsEmptyDirectory" oder "IsDirectoryEmpty" heissen.
Ob "IsEmptyDirectory" oder "IsDirectoryEmpty" kommt drauf an was die Funktion machen soll.
"IsEmptyDirectory" würde für mich heissen die Funktion liefert einfach "false" zurück wenn der übergebene Pfad garkein Verzeichnis ist bzw. nicht existiert.
"IsDirectoryEmpty" würde ich die Funktion nennen wenn sie in dem Fall "übergebener Pfad ist kein Verzeichnis" eine Exception wirft.
Mehr Sinn wird wohl in den meisten Fällen Variante 1 machen, also "IsEmptyDirectory".