Moyen rapide pour énumérer tous les fichiers, y compris les sous-dossiers
Personne ne sait d'une manière plus rapide d'énumérer par le biais d'un répertoire et sous-dossiers de rassembler tous les fichiers dans l'énumération? C'est ce que j'ai en ce moment:
Public Shared allFiles() As String
allFiles = Directory.GetFiles(<ServerLocation>, "*.*", SearchOption.AllDirectories)
Merci!
JFV
EDIT: je suis l'énumération de ces fichiers à partir d'un emplacement sur le serveur. Je ne sais pas si cela va changer le point de vue de cette question ou pas. Merci pour tous les commentaires jusqu'à présent!
OriginalL'auteur JFV | 2009-06-28
Vous devez vous connecter pour publier un commentaire.
Réponse courte:
Si ce code est fonctionnellement correcte pour votre projet et vous n'avez pas prouvé qu'elle est un problème avec un profileur de ne pas le modifier. Continuer à utiliser une fonctionnellement correcte de la solution jusqu'à ce que vous le prouver à être lent.
Réponse longue:
La rapidité ou la lenteur de ce morceau de code est dépend d'un beaucoup de facteurs. Beaucoup de ce qui dépend de la machine en cours d'exécution sur (par exemple la vitesse du disque dur). En regardant le code qui implique le système de fichiers et rien d'autre, il est très difficile de dire "x est plus rapide que y" avec un quelconque degré de certitude.
Dans ce cas, je ne peux vraiment me prononcer sur une chose. Le type de retour de cette méthode est un tableau de FileInfo valeurs. Les tableaux nécessitent de la mémoire contiguë et de tableaux de très grande taille peuvent causer des problèmes de fragmentation dans votre tas. Si vous avez extrêmement gros répertoires que vous êtes à la lecture, elle peut conduire à des tas fragmentiation et indirectement des problèmes de performances.
Si cela s'avère être un problème, alors vous pouvez PInvoke en FindFirstFile /FindNextFile et de les faire un par un. Le résultat sera probablement fonctionnellement plus lent dans les cycles CPU mais auront moins de pression sur la mémoire.
Mais je dois souligner que vous devriez faire la preuve de ces problèmes avant de vous fixer.
Pourtant, dans le même temps, toute personne qui a essayé de lister tous les fichiers dans un répertoire volumineux .NET saurez que c'EST un problème de performance. Liste de 1000 noms de dossier, JUSTE LES NOMS de DOSSIER, peut prendre près d'une seconde.
OriginalL'auteur JaredPar
en utilisant le Système.Les Collections.Générique;
Accessoires à l'article original: http://www.codeproject.com/KB/cs/workerthread.aspx
OriginalL'auteur user430728
C'est un brut moyen de le faire.
Obtenir la sortie de cette dans un fichier texte, lire & diviser par
\r\n
.Exécutez la commande ci-dessus dans un répertoire spécifique, à voir si ça aide.
Pour obtenir uniquement les répertoires
Pour obtenir uniquement les fichiers
EDIT: Jared est juste pour dire de ne pas utiliser d'autres approches, à moins que votre approche est avéré lent.
OriginalL'auteur shahkalpesh
Voici ma solution. Le premier démarrage est un peu lent, im travaillant sur que. Le mon.ordinateur.objet filesystem est probabbly le problème de la lenteur de démarrage. Mais cette méthode liste de 31 000 fichiers en moins de 5 minutes sur un Réseau.
OriginalL'auteur Rob