У меня есть коллекция объектов, и я бы хотел получить все объекты, у которых одно из свойств соответствует строке поиска. До сих пор я пробовал несколько методов фильтрации, а именно List.ForAll, IEnumerable.Where и ParallelQuery.Where.Самый быстрый способ фильтрации коллекции C#
List<Foo> cache = GetAllObjs(); // source list containing lots of objects
Вариант 1:
List<Foo> foos = cache.AsParallel().Where(x => x.Name == "bar").ToList();
Вариант 2:
List<Foo> foos = cache.Where(x => x.Name == "bar").ToList();
Вариант 3:
List<Foo> foos = cache.FindAll(x => x.Name == "bar");
Поскольку ParallelQuery.Where использует несколько ядер, то, как представляется, быстрое решение. Кроме этого, существуют ли другие методы фильтрации, такие как использование разных типов коллекций или функции фильтрации? Исходная коллекция не обязательно должна быть списком.
[Гонка лошадей] (http://ericlippert.com/2012/12/17/performance-rant/) ... возможно, это зависит от размера массива и других факторов. – Sayse
Я гонялся за лошадьми. .. Три, о которых я мог подумать. Мне было интересно, есть ли у меня разные лошади, которые могли бы участвовать в гонке ... – painiyff
Сложно сказать, какой лучший вариант (из данного) был бы, как я сказал, для меньших массивов/списков, время разворота параллельные потоки могут не принести никакой пользы с точки зрения времени выполнения. вызов 'ToList' может не понадобиться либо – Sayse