Except
будет примерно в миллиард раз быстрее, потому что он использует хеш-таблицу для определения разницы набора ¹ и, следовательно, даст производительность O (n).
Комбинация Contains
/ All
будет иметьвыполнить наивный линейный поиск ² свыше SearchKeywords
для каждого элемента в keywords
, поэтому мы говорим о производительности O (n²) (на самом деле n * m
, но числа, которые вы даете, находятся в том же диапазоне и используют любое оправдание, которое я могувведите показатели).
Обновление: , как и ожидалось, это даже не близко , если вы явно не создадите HashSet
.
nUnlessконечно, SearchKeywords
уже равен a HashSet<string>
, поскольку flq очень правильно указывает в комментарии.
«По крайней мере, если мы говорим о IEnumerable
, который используетLINQ для объектов стандартной реализации.IQueryable
теоретически может обнаружить это и реализовать его любым удобным для него способом.