Найти тему

Не используйте LINQ, говорили они


А почему - не говорили. Исправляем ситуэйшн. Что такое LINQ и как с ним работать я рассказывать здесь не буду, это прекрасно передано в видео, которым я уже делился однажды. А перейду, непосредственно к вопросу, почему же говорят не использовать LINQ, при этом часто сопровождается магическим "память жрёт".

Жрёт память - это да, но далеко не всегда, а в конкретных случаях. И нас, как разработчиков интересует не столько размер потребляемой памяти, сколько частота ее выделения. Ведь выделение памяти вызывает ее фрагментацию, а от этого и разные приколы вылезают. Подробнее я рассказывал в видео "Как работает память в C#".

Соответственно самое важное при использовании LINQ - понимание, что им не рекомендуется пользоваться в местах, которые вызываются часто. Update, например, - не место для использования LINQ (еще раз повторюсь, речь идет о тех методах LINQ, которые все-таки выделяют память, остальными пользуйтесь на здоровье и в Update).

Иными словами, LINQ безжалостно можно использовать в различных инициализациях.

Однако, чтобы полностью закрыть этот вопрос, давайте перечислим методы LINQ со звездочкой (выделяют память) (все они возвращают созданную коллекцию, если что):

1️⃣ ToList()

2️⃣ ToArray()

3️⃣ ToDictionary()

4️⃣ ToHashSet()

5️⃣ Методы групировки Concat(), Union(), GroupBy(), GroupJoin()

6️⃣ Метод сортировки OrderBy()

Немного, правда? А криков-то было.

UPD: Методы First(), Any() и другие и подобные используют память для хранения результата, это либо значение, либо ссылка. Но нужно иметь ввиду, что память активно используется делегатами, применяемыми для этих методов, так что если юзаете их в частоиспользуемом месте, делегаты лучше закешировать.

#полезное #советы
Не используйте LINQ, говорили они  А почему - не говорили. Исправляем ситуэйшн.
1 минута