Больше, чем о LINQ, чтобы [включить ваш любимый провайдер здесь], этот вопрос касается поиска или фильтрации коллекций в памяти.Производительность LINQ в памяти
Я знаю, что LINQ (или поиск/фильтрация методов расширения) работает в объектах, реализующих IEnumerable
или IEnumerable<T>
. Вопрос заключается в следующем: из-за природы перечисления, каждая сложность запроса не менее O (n)?
Например:
var result = list.FirstOrDefault(o => o.something > n);
В этом случае, каждый алгоритм будет принимать по меньшей мере О (п) если list
упорядочен по отношению к 'something'
, в этом случае поиск должен принять O (log (n)): это должен быть двоичный поиск. Однако, если я правильно понял, этот запрос будет разрешен путем перечисления, поэтому он должен был принять O (n), даже в list
был ранее заказан.
- Есть ли что-то я могу сделать, чтобы решить запрос в O (журнал (п))?
- Если мне нужна производительность, следует ли использовать Array.Sort и Array.BinarySearch?
Спасибо за ответ. Это то, что я думал. Но ... нет ли способов обойти это? Возможно, с распараллеливанием. – 2008-09-27 17:03:48
@ Марамбио: взгляните на PLINQ. Он пытается распараллелить большую часть LINQ. – user7116 2008-09-27 17:08:01
Ну ... спасибо! Это должен быть ответ. – 2008-09-27 17:09:30