Одна вещь, которую вы можете сделать, это изменить Contains на StartsWith . StartsWith
быстрее провалится в случае неудачного совпадения.
directoriesThatWillBeCreated = (from a in FilesThatWillBeCopied
from b in directoriesThatWillBeCreated
where a.FullName.StartsWith(b.FullName)
select b).ToList();
Это не полное решение, хотя. Если FilesThatWillBeCopied
имеет M элементов, а directoriesThatWillBeCreated
имеет N элементов, то ваш запрос будет обрабатывать сравнения строк MxN.
Другой вариант
Еще одна оптимизация, чтобы попробовать, сначала переберите directoriesThatWillBeCreated
, затем выберите те, которые соответствуют любому FileInfo
в FilesThatWillBeCopied
. Проверяя, есть ли совпадение, вы можете прервать тестирование файлов, как только совпадение будет найдено. Это можно сделать так: (предупреждение, код блокнота следует)
directoriesThatWillBeCreated = directoryThatWillBeCreated
.Select(b => FilesThatWillBeCopied
.Any(a => a.FullName.StartsWith(b.FullName)));