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?
À 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()
. MaisEnumerateFiles()
retourne cet itérateur directement pendant qu'ilGetFiles()
construit un supplémentList
et appelleToArray()
. Donc, si vous vous souciez de la vitesse, il est logique d'utiliserEnumerateFiles()
et de gérer vous-même l'itérateur.EnumerateFiles
renvoieIEnumerable<string>
et cela implique une exécution différée. Il n'est disponible que dans Fx4 et plus.la source
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.la source
Array
vs.Enumerable
Votre réponse est générique pour toutes ces situations mais ne répond pas à la question posée.