Comment vérifier rapidement si le dossier est vide.NET)?

Je dois vérifier, si le répertoire sur le disque est vide. Cela signifie qu'il ne contient pas de fichiers/dossiers. Je sais qu'il y a une méthode simple. Nous obtenons tableau de FileSystemInfo et de vérifier si le nombre d'éléments est égal à zéro. Quelque chose comme ça:

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();
}

Cette approche semble OK. MAIS!! Il est très, très mauvais d'un point de vue de la performance. GetFileSystemInfos() est très dur de méthode. En fait, il énumère tous les fichiers objets de dossier, obtient toutes leurs propriétés, crée des objets, des remplissages tableau typé etc. Et tout cela simplement pour vérifier la Longueur. C'est idiot, n'est-ce pas?

Je viens de profilés code et a déterminé que ~250 appels de cette méthode sont exécutées dans ~500ms. C'est très lent et je crois, qu'il est possible de le faire beaucoup plus rapidement.

Des suggestions?

  • Par curiosité, pourquoi voudriez-vous vérifier le répertoire 250 fois?
  • Je suppose que l'on souhaite vérifier 250 situés dans des répertoires différents. Pas un seul n'a plus de 250 fois.
InformationsquelleAutor zhe | 2009-04-16