L'appel à toList() a-t-il un impact sur les performances ?
Oui, bien sûr. En théorie, même i++
a un impact sur les performances, il ralentit le programme pendant quelques ticks.
Qu'est-ce que .ToList
faire ?
Lorsque vous invoquez .ToList
le code appelle Enumerable.ToList()
qui est une méthode d'extension que return new List<TSource>(source)
. Dans le constructeur correspondant, dans les pires circonstances, il parcourt le conteneur d'éléments et les ajoute un par un dans un nouveau conteneur. Son comportement a donc peu d'incidence sur les performances. Il est impossible d'être un goulot d'étranglement pour les performances de votre application.
Qu'est-ce qui ne va pas dans le code de la question ?
Directory.GetFiles
parcourt le dossier et renvoie les noms de tous les fichiers immédiatement en mémoire, il y a un risque potentiel que la chaîne[] coûte beaucoup de mémoire, ce qui ralentit tout.
Que faire alors ?
Cela dépend. Si vous (ainsi que votre logique commerciale) garantissez que la quantité de fichiers dans le dossier est toujours faible, le code est acceptable. Mais il est toujours conseillé d'utiliser une version paresseuse : Directory.EnumerateFiles
en C#4. Cela ressemble beaucoup plus à une requête, qui ne sera pas exécutée immédiatement, vous pouvez y ajouter d'autres requêtes comme :
Directory.EnumerateFiles(myPath).Any(s => s.Contains("myfile"))
qui arrêtera recherche le chemin dès qu'un fichier dont le nom contient "monfichier" est trouvé. Cette méthode est évidemment plus performante que .GetFiles
.