J'ai une méthode simple pour comparer un tableau d'objets FileInfo à une liste de noms de fichiers pour vérifier quels fichiers ont déjà été traités. La liste non traitée est ensuite renvoyée.J'ai une méthode non-performant, comment puis-je améliorer son efficacité?
La boucle de cette méthode parcourt environ 250 000 objets FileInfo. Cela prend une quantité de temps obscène pour rivaliser.
L'inefficacité est évidemment l'appel de méthode Contains sur la collection processedFiles. D'abord, comment puis-je vérifier si ma suspicion est vraie quant à la cause et, deuxièmement, comment puis-je améliorer la méthode pour accélérer le processus?
public static List<FileInfo> GetUnprocessedFiles(FileInfo[] allFiles, List<string> processedFiles)
{
List<FileInfo> unprocessedFiles = new List<FileInfo>();
foreach (FileInfo fileInfo in allFiles)
{
if (!processedFiles.Contains(fileInfo.Name))
{
unprocessedFiles.Add(fileInfo);
}
}
return unprocessedFiles;
}
Pour (1) utiliser un profileur décent, par ex. DotTrace de JetBrains (essai gratuit disponible). –