Я должен проверить, если каталог на диске пуст. Это означает, что он не содержит никаких папок / файлов. Я знаю, что есть простой метод. Мы получаем массив 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 мс. Это очень медленно, и я считаю, что это можно сделать гораздо быстрее.
Есть предложения?