Все самое полезное для C#-разработчика в одном канале.
Наши курсы: https://clc.to/y3LDtw
По рекламе: @tproger_sales_bot
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Post #5518
5.51K

🚀Как ускорить LINQ: полезные трюки
1️⃣Избегайте повторной обработки коллекций
Повторный вызов методов LINQ, таких как Where, приводит к повторному перебору коллекции.
✅ Решение: кэшируйте результаты, если они используются несколько раз:
2️⃣Используйте ForEach вместо Select, если результат не нужен
Использование Select для выполнения действий без необходимости возвращать коллекцию увеличивает накладные расходы.
✅ Решение: используйте ForEach для простого выполнения действий:
3️⃣Избегайте использования Count для проверки на пустоту
Count перебирает всю коллекцию, что замедляет выполнение.
✅ Решение: используйте Any() вместо Count():
4️⃣Параллельное выполнение (PLINQ)
Обработка больших коллекций может быть медленной.
✅ Решение: используйте PLINQ для параллельного выполнения:
5️⃣Проекционная оптимизация (Select)
Извлечение всех данных, когда требуется только несколько полей.
✅ Решение: Используйте Select для выборки только необходимых данных:
6️⃣Фильтрация перед проекцией
Проекция больших объёмов данных перед фильтрацией замедляет запрос.
✅ Решение: сначала фильтруйте, затем проецируйте:
🐸Библиотека шарписта
#tip
1️⃣Избегайте повторной обработки коллекций
Повторный вызов методов LINQ, таких как Where, приводит к повторному перебору коллекции.
✅ Решение: кэшируйте результаты, если они используются несколько раз:
var filtered = myCollection.Where(x => x.Age > 30).ToList(); // Выполняется один раз
var count = filtered.Count;
var average = filtered.Average(x => x.Salary);
2️⃣Используйте ForEach вместо Select, если результат не нужен
Использование Select для выполнения действий без необходимости возвращать коллекцию увеличивает накладные расходы.
✅ Решение: используйте ForEach для простого выполнения действий:
myCollection.ForEach(x => Console.WriteLine(x.Name));
3️⃣Избегайте использования Count для проверки на пустоту
Count перебирает всю коллекцию, что замедляет выполнение.
✅ Решение: используйте Any() вместо Count():
if (myCollection.Any()) // Быстрее, чем myCollection.Count > 0
4️⃣Параллельное выполнение (PLINQ)
Обработка больших коллекций может быть медленной.
✅ Решение: используйте PLINQ для параллельного выполнения:
var result = myCollection.AsParallel()
.Where(x => x.IsActive)
.ToList();
5️⃣Проекционная оптимизация (Select)
Извлечение всех данных, когда требуется только несколько полей.
✅ Решение: Используйте Select для выборки только необходимых данных:
var names = myCollection.Select(x => x.Name).ToList();
6️⃣Фильтрация перед проекцией
Проекция больших объёмов данных перед фильтрацией замедляет запрос.
✅ Решение: сначала фильтруйте, затем проецируйте:
var result = myCollection.Where(x => x.Age > 30)
.Select(x => x.Name)
.ToList();
🐸Библиотека шарписта
#tip
- 👍 27
- 🥱 19
- 🎉 3
- ❤ 2
- ⚡ 1

















