web-dev-qa-db-fra.com

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

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

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

Rien d'autre?

127
DarthVader

De 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 renvoyée. Lorsque vous utilisez GetFiles, vous devez attendre que le tableau complet 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 renvoie un IEnumerable qui peut être évalué quelque peu paresseusement, alors que GetFiles renvoie un string[] qui doit être entièrement rempli avant de pouvoir revenir.

154
Daniel DiPaolo

EnumerateFiles retourne IEnumerable<string> et cela implique une exécution différée. Il est uniquement disponible à partir de Fx4.

29
Henk Holterman

Lorsque vous utilisez EnumerateFiles, toute la vitesse est perdue si vous utilisez ensuite .Last. Cela a du sens, car pour accéder au dernier fichier, il faudra énumérer tous les fichiers, puis récupérer le dernier.

Cependant, en utilisant .First ou .FirstOrDefault devient très rapide, car il saisit simplement le premier élément et passe à autre chose.

15
Skotte