34 подписчика
Не используйте 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() и другие и подобные используют память для хранения результата, это либо значение, либо ссылка. Но нужно иметь ввиду, что память активно используется делегатами, применяемыми для этих методов, так что если юзаете их в частоиспользуемом месте, делегаты лучше закешировать.
#полезное #советы
1 минута
20 ноября 2023