Quelle est la différence entre Directory.EnumerateFiles
vs GetFiles
?
Évidemment, l'un renvoie un tableau et l'autre un Enumerable.
Autre chose ?
Quelle est la différence entre Directory.EnumerateFiles
vs GetFiles
?
Évidemment, l'un renvoie un tableau et l'autre un Enumerable.
Autre chose ?
Desde les docs :
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 ne soit retournée ; lorsque vous utilisez GetFiles, vous devez attendre que le tableau entier de noms soit retourné 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, en gros, EnumerateFiles
renvoie un IEnumerable
qui peut être évalué paresseusement, alors que GetFiles
renvoie un string[]
qui doit être entièrement remplie avant de pouvoir revenir.
L'évaluation paresseuse peut ne pas être totalement gratuite - par exemple si vous devez la remettre dans un tableau à la fin (j'ai vu ça !). La paresse est efficace lorsque l'on "yagni"-tous : vous n'allez pas avoir besoin de tous les éléments, et il suffit d'arrêter d'itérer après quelques-uns.
L'énumération paresseuse est également intéressante si vous devez énumérer une collection tellement grande que la construction de toute la collection d'abord en mémoire est trop lourde. Vous pouvez simplement traiter les éléments comme ils viennent et les oublier.
@TomaszGandor : Ou lorsqu'il n'y a pas besoin de stocker tous les noms de fichiers, par exemple lorsqu'on ne fait que renommer des fichiers.
EnumerateFiles
renvoie à IEnumerable<string>
et cela implique une exécution différée. Elle n'est disponible qu'à partir de la version Fx4.
Le système de fichiers étant notoirement lent (surtout pour les gros dossiers), l'exécution différée peut être un véritable atout pour le traitement séquentiel. Cela dépend de beaucoup d'autres facteurs.
Lorsque vous utilisez EnumerateFiles, vous perdez toute vitesse si vous utilisez ensuite .Last
. C'est logique bien sûr, car pour atteindre le dernier fichier, il faudra énumérer tous les fichiers, puis saisir le dernier.
Cependant, l'utilisation de .First
o .FirstOrDefault
devient très rapide, car il saisit simplement le premier élément et passe à autre chose.
Cette très ancienne question demandait quelles étaient les différences entre les deux sexes. Array
vs Enumerable
aspect. Votre réponse est générique à toutes ces situations mais ne répond pas à la question posée.
Le fait est que EnumerateFiles vous permet de commencer à accéder aux données plus rapidement, dans certains cas.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.