недостатки использования IQueryable! - PullRequest
0 голосов
/ 21 января 2011

Есть ли какие-либо проблемы с производительностью, связанные с использованием IQueryable?
Кроме того, если я использую курсор вместо IQueryable (это лучше).
IQueryable против IEnumerable против IList?
Я использую MongoDB в качестве базы данных.Спасибо

Ответы [ 2 ]

4 голосов
/ 21 января 2011

Я не знаю, как работает привязка MongoDB C #, но опишите, как она обычно работает:

При использовании IQueryable создается дерево выражений, затем переводится в формат, понятный базе данных, и затем выполняется на сервере базы данных.

Это обычно имеет небольшие издержки (создание дерева выражений и его перевод) по сравнению с непосредственным написанием запросов в формате, который понимает база данных.

С IEnumerable вместо выражений используются делегаты. Необходимо выполнить итерацию по всему набору данных, а затем выполнить фильтрацию с использованием Linq-To-Objects. Это намного медленнее.

4 голосов
/ 21 января 2011

Это просто разные интерфейсы, и поскольку интерфейсы не содержат никакой реализации, это не имеет значения для используемой вами производительности.

При зацикливании значений будет использоваться перечислитель фактического класса, независимо от того, какой интерфейс вы используете для доступа к нему.

...