LINQ to Objects Методы оптимизации? - PullRequest
7 голосов
/ 27 февраля 2010

Какие методы оптимизации LINQ to Objects вы используете или видели в дикой природе?

В ожидании «yield foreach» и других оптимизаций языка / компилятора, которые появятся в C # в 201x году, я заинтересован в том, чтобы сделать все возможное, чтобы с помощью LINQ везде было меньше проблем с производительностью.

Один шаблон, который я видел до сих пор, - это создание пользовательских реализаций IEnumerable для конкретных комбинаторов, чтобы перечисляемое число не пересчитывалось несколько раз.

1 Ответ

10 голосов
/ 27 февраля 2010

Тот, который я заметил несколько раз - не используйте:

if (query.Count() > 0)

... используйте это вместо:

if (query.Any())

Таким образом, нужно только найти первое совпадение.

РЕДАКТИРОВАТЬ: Вас также может заинтересовать сообщение в блоге , которое я недавно написал об оптимизации, которое может находиться в LINQ to Objects, но отсутствует (или не было в .NET 3,5).

Кроме того, если вы собираетесь выполнить много операций x.Contains(y), а x является результатом существующего запроса (т. Е. Это не будет какая-то оптимизированная коллекция), вам, вероятно, следует подумать о создании HashSet<T> из x, чтобы избежать линейного сканирования (выполнения запроса для получения результатов x) на каждой итерации.

...