Ich habe eine einfache Methode, um ein Array von FileInfo-Objekten mit einer Liste von Dateinamen zu vergleichen, um zu überprüfen, welche Dateien bereits verarbeitet wurden. Die unverarbeitete Liste wird dann zurückgegeben.Ich habe eine nicht-performante Methode, wie kann ich die Effizienz verbessern?
Die Schleife dieser Methode iteriert für etwa 250.000 FileInfo-Objekte. Das dauert eine obszöne Zeit, um zu konkurrieren.
Die Ineffizienz ist offensichtlich der Aufruf der Contains-Methode für die collectionedFiles-Auflistung.
Zuerst, wie kann ich überprüfen, um sicherzustellen, dass mein Verdacht über die Ursache wahr ist und zweitens, wie kann ich die Methode verbessern, um den Prozess zu beschleunigen?
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;
}
Für (1) einen anständigen Profiler, z. DotTrace von JetBrains (kostenlose Testversion verfügbar). –