Je dois vérifier si le répertoire sur le disque est vide. Cela signifie qu'il ne contient aucun dossier/fichier. Je sais qu'il existe une méthode simple. Nous obtenons un tableau de FileSystemInfo's et vérifions 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 correcte. MAIS ! elle est très, très mauvaise du point de vue des performances. GetFileSystemInfos() est une méthode très difficile. En fait, elle énumère tous les objets du système de fichiers du dossier, récupère toutes leurs propriétés, crée des objets, remplit des tableaux typés, etc. Et tout cela juste pour vérifier la longueur. C'est stupide, n'est-ce pas ?
Je viens de profiler ce code et j'ai déterminé que ~250 appels de cette méthode sont exécutés en ~500ms. C'est très lent et je pense qu'il est possible de le faire beaucoup plus rapidement.
Des suggestions ?
7 votes
Par curiosité, pourquoi voulez-vous vérifier le répertoire 250 fois ?
2 votes
@ya23 Je suppose que l'on voudrait vérifier 250 répertoires différents. Pas un seul 250 fois.