Tengo un método simple para comparar una matriz de objetos FileInfo con una lista de nombres de archivos para verificar qué archivos ya se han procesado. La lista no procesada se devuelve.Tengo un método no mejorado, ¿cómo puedo mejorar su eficiencia?
El bucle de este método itera para aproximadamente 250,000 objetos FileInfo. Esto está tomando una cantidad obscena de tiempo para competir.
La ineficacia es obviamente la llamada al método Contiene en la colección processedFiles.
Primero, ¿cómo puedo comprobar para asegurarme de que mi sospecha es cierta sobre la causa y, en segundo lugar, cómo puedo mejorar el método para acelerar el proceso?
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;
}
Para (1) utilizar un perfilador decente, p. DotTrace de JetBrains (versión de prueba gratuita disponible). –