Мне нужно проверить, если каталог на диске пуст. Это означает, что он не содержит никаких папок/файлов. Я знаю, что есть простой метод. Мы получаем массив FileSystemInfo и проверяем, равен ли число элементов нулю. Что-то вроде этого:
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();
}
Этот подход кажется ОК. НО!! Это очень, очень плохо с точки зрения производительности. GetFileSystemInfos() - очень жесткий метод. Фактически, он перечисляет все объекты файловой системы в папке, получает все их свойства, создает объекты, заполняет типизированный массив и т.д. И все это просто для проверки длины. Это глупо, не так ли?
Я только профилировал такой код и определил, что ~ 250 вызовов такого метода выполняются в ~ 500 мс. Это очень медленно, и я считаю, что это можно сделать гораздо быстрее.
Любые предложения?