171 votes

Quelle est la différence entre Directory.EnumerateFiles et Directory.GetFiles ?

Quelle est la différence entre Directory.EnumerateFiles vs GetFiles ?

Évidemment, l'un renvoie un tableau et l'autre un Enumerable.

Autre chose ?

199voto

Daniel DiPaolo Points 24085

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.

6 votes

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.

9 votes

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.

1 votes

@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.

37voto

Henk Holterman Points 153608

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.

5 votes

Que signifie Fx4 ?

4 votes

.net FrameWork 4

25 votes

C'est un nom inhabituel pour .NET 4.0.

19voto

Skotte Points 38

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.

6 votes

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.

2 votes

Le fait est que EnumerateFiles vous permet de commencer à accéder aux données plus rapidement, dans certains cas.

19 votes

Le fait est que ce commentaire est très utile, mais qu'il ne répond pas à la question. Il y a une distinction à faire.

Prograide.com

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.

Powered by:

X