2015-01-20 3 views
0

У моего приложения есть коллекция объектов Job. Существует уникальное свойство (Key), называемое Jobnumber, и свойство DateTime, называемое Bookingtime, которое не обязательно является уникальным. Существуют и другие свойства.Linq on DateTime Collections Лучшая производительность

Я хочу сделать много запросов linq на основе свойства бронирования, а также случайных вставок и удаления объектов из коллекции.

Если у меня есть от 1000 до 2000 объектов в коллекции, я должен использовать SortedList<TKey, TValue> или просто List<T> и заказать его вручную с помощью linq?

Включены ли опции для 10 000 объектов в коллекции?

Объекты получены из базы данных и уже отсортированы по времени бронирования, но мне нужно работать с определенными подмножествами datetime.

DateTime t1,t2; //equals some values. 
var subSet = jobs.where(a=>a.Bookingtime >= t1 && 
a.Bookingtime < = t2).ToList(); 
+0

A SortedList потребует уникального ключа. Если вы дадите несколько примеров того, как будут выглядеть запросы, мы можем дать лучшие ответы. –

+0

Если количество запросов, основанных на дате, значительно превышает количество обновлений, я бы пошел на сортированную коллекцию. –

+0

@ user3812046: данные уже отсортированы ?? Почему вы не запрашиваете базу данных сразу с ограничениями? –

ответ

1

Как можно видеть в документации, то SortedList.Add (слишком плохо нет AddAll метод, как и в Java, которые могли бы оптимизировать объемную вставку) операция выполняется в O (N), тогда как OrderBy работает в O (n log n). Подразумевается, что только на небольших (или отсортированных списках) SortedListможет outperform Linq.

Кроме того, обратите внимание, что Linq использует ленивую оценку. Он будет сортировать элементы только в том случае, если вам действительно нужен результирующий список (или используйте метод ToList, ...). Если вы таким образом никогда ничего не сделаете с результатом, среда не будет сортировать данные.

This article даже реализует действительно ленивый OrderBy, так что если вам нужны только первые i элементов, он не будет сортировать весь список.

EDIT: на основе обновленной вопрос, вы лучше включить .where заявление как WHERE в запросе SQL. Это может уменьшить использование сети, памяти и процессора, поскольку база данных во многих случаях имеет средства для оптимизации запросов чрезвычайно.

+0

Уверен, что я делаю заказы на 1 месяц и вам нужно запросить разные подмножества этой коллекции для разных сценариев. – Paul

+0

Мне просто интересно, нужно ли вам подмножество этих объектов, что бы было быстрее. – Paul

+0

@ user3812046: для таких небольших подмножеств (и быстрых тестов), интересно, это будет иметь большое значение. Возможно, вы должны запустить некоторые тесты. –

Смежные вопросы