Muszę sprawdzić, czy katalog na dysku jest pusty. Oznacza to, że nie zawiera żadnych folderów / plików. Wiem, że jest prosta metoda. Otrzymujemy tablicę FileSystemInfo i sprawdzamy, czy liczba elementów jest równa zero. Coś w tym stylu:
public static bool CheckFolderEmpty(string path)
{
if (string.IsNullOrEmpty(path))
{
throw new ArgumentNullException("path");
}
var folder = new DirectoryInfo(path);
if (folder.Exists)
{
return folder.GetFileSystemInfos().Length == 0;
}
throw new DirectoryNotFoundException();
}
To podejście wydaje się OK. ALE!! Z punktu widzenia wydajności jest to bardzo, bardzo złe. GetFileSystemInfos () jest bardzo trudną metodą. Właściwie to wylicza wszystkie obiekty systemu plików folderu, pobiera wszystkie ich właściwości, tworzy obiekty, wypełnia wpisaną tablicę itp. A wszystko po to, by po prostu sprawdzić Długość. To głupie, prawda?
Właśnie sprofilowałem taki kod i ustaliłem, że ~ 250 wywołań takiej metody jest wykonywanych w ~ 500 ms. Jest to bardzo powolne i uważam, że można to zrobić znacznie szybciej.
Jakieś sugestie?