Quelle est la différence entre Directory.EnumerateFiles
vs GetFiles
?
De toute évidence, l'un retourne un tableau et l'autre renvoie Enumerable.
Rien d'autre?
Quelle est la différence entre Directory.EnumerateFiles
vs GetFiles
?
De toute évidence, l'un retourne un tableau et l'autre renvoie Enumerable.
Rien d'autre?
Réponses:
À partir de la documentation :
Les méthodes EnumerateFiles et GetFiles diffèrent comme suit: Lorsque vous utilisez EnumerateFiles, vous pouvez commencer à énumérer la collection de noms avant que la collection entière soit renvoyée; lorsque vous utilisez GetFiles, vous devez attendre que tout le tableau de noms soit renvoyé avant de pouvoir accéder au tableau. Par conséquent, lorsque vous travaillez avec de nombreux fichiers et répertoires, EnumerateFiles peut être plus efficace.
Donc, fondamentalement, EnumerateFiles
retourne un IEnumerable
qui peut être évalué paresseusement, tandis que GetFiles
renvoie un string[]
qui doit être entièrement rempli avant de pouvoir revenir.
FileSystemEnumerableFactory.CreateFileInfoIterator()
. Mais EnumerateFiles()
retourne cet itérateur directement pendant qu'il GetFiles()
construit un supplément List
et appelle ToArray()
. Donc, si vous vous souciez de la vitesse, il est logique d'utiliser EnumerateFiles()
et de gérer vous-même l'itérateur.
EnumerateFiles
renvoie IEnumerable<string>
et cela implique une exécution différée. Il n'est disponible que dans Fx4 et plus.
Lorsque vous utilisez EnumerateFiles, toute vitesse est perdue si vous utilisez ensuite .Last
. Cela a du sens bien sûr, car pour accéder au dernier fichier, il devra énumérer tous les fichiers, puis récupérer le dernier.
Cependant, utiliser .First
ou .FirstOrDefault
devient très rapide, car il saisit simplement le premier élément et passe à autre chose.
Array
vs. Enumerable
Votre réponse est générique pour toutes ces situations mais ne répond pas à la question posée.