Mon application indexe le contenu de tous les disques durs sur les ordinateurs des utilisateurs finaux. J'utilise Directory.GetFiles et Directory.GetDirectories pour traiter récursivement toute la structure de dossiers. J'indexe seulement quelques types de fichiers sélectionnés (jusqu'à 10 types de fichiers). Je vois dans le profileur que la plus grande partie du temps d'indexation est consacrée à l'énumération des fichiers et des dossiers - en fonction du ratio de fichiers qui seront réellement indexés jusqu'à 90% du temps.Méthode rapide (lowlevel) pour traiter récursivement des fichiers dans des dossiers
Je voudrais faire l'indexation aussi vite que possible. J'ai déjà optimisé l'indexation et le traitement des fichiers indexés. Je pensais utiliser des appels d'API Win32, mais je vois actuellement dans le profileur que la plus grande partie du temps de traitement est réellement consacré à ces appels d'API effectués par .NET.
Existe-t-il une méthode (éventuellement de bas niveau) accessible à partir de C# qui rendrait l'énumération des fichiers/dossiers au moins partiellement plus rapide?
Comme demandé dans le commentaire, mon code actuel (juste un système avec des pièces non pertinentes coupé):
private IEnumerable<IndexedEntity> RecurseFolder(string indexedFolder)
{
//for a single extension:
string[] files = Directory.GetFiles(indexedFolder, extensionFilter);
foreach (string file in files)
{
yield return ProcessFile(file);
}
foreach (string directory in Directory.GetDirectories(indexedFolder))
{
//recursively process all subdirectories
foreach (var ie in RecurseFolder(directory))
{
yield return ie;
}
}
}
Cela vous dérange de partager le code que vous avez maintenant? – Bobby
@Bobby: J'ai mis à jour la question – Marek
Performance-sage, la "profondeur de l'API" n'a pas beaucoup d'importance. Le plus important est la stratégie récursive, lire/traiter tous les fichiers dans le répertoire courant avant d'aller dans les sous-dossiers (Mrk Gravell le comprend bien - en supposant que les appels GetFiles()/GetDirectories lisent tout, et l'appel GetDirectories est servi depuis le système de fichiers cache). – peterchen