Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥29🤝22👍7
LINQ-запросы позволяют элегантно обрабатывать данные, но иногда не лучшим способом это сказывается на производительности.
Рассмотрим, как оптимизировать LINQ, чтобы код оставался быстрым и эффективным.
1. Избегайте многократного вызова .Where
В LINQ каждый вызов .Where создаёт дополнительную операцию фильтрации, что может замедлить выполнение:
var result = data
.Where(x => x.IsActive)
.Where(x => x.Age > 18);
Лучше объединить условия в одном вызове, чтобы избежать лишней итерации:
var result = data.Where(x => x.IsActive && x.Age > 18);
2. Используйте ToList() и ToArray() с умом
ToList() или ToArray() создают коллекцию сразу, но применять их нужно осторожно, чтобы не перегружать программу ненужными данными в памяти:
var activeUsers = data.Where(x => x.IsActive).ToList(); // может перегрузить память
Если коллекция понадобится позже, сохраняйте запрос как IEnumerable, чтобы отложить его выполнение.
3. Используйте Any() вместо .Count()
Если нужно проверить наличие элементов, то здесь Any() быстрее, чем Count() > 0, так как завершает поиск сразу после нахождения первого подходящего элемента:
if (data.Any(x => x.IsActive)) { /* ... */ }
Жми 🔥 если понравился пост
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥51👍7🤝5
This media is not supported in your browser
VIEW IN TELEGRAM
Git How To — сайт, который предлагает пошаговые руководства и практические примеры для изучения системы контроля версий Git, облегчая процесс освоения её основных команд и функционала.
⛓ Ссылочка: https://githowto.com/ru
➡️ C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥6🤝3👎1
Исключения крайне важны при написании кода, не везде вас спасет if else, в этом посте разберем основные принципы работы исключений.
1. Использование блоков try и catch: для перехвата и обработки исключений в коде:
try {
int result = 10 / int.Parse("0");
} catch (DivideByZeroException ex) {
Console.WriteLine("Деление на ноль: " + ex.Message);
}
2. Создание пользовательских исключений: для более специфичной обработки ошибок:
public class CustomException : Exception {
public CustomException(string message) : base(message) {}
}
throw new CustomException("Произошла ошибка!");
3. Использование finally: для выполнения кода независимо от того, произошло исключение или нет:
try {
// код
} catch (Exception ex) {
Console.WriteLine(ex.Message);
} finally {
Console.WriteLine("Этот код выполнится в любом случае.");
}
4. Множественные catch блоки: для обработки различных типов исключений отдельно:
try {
// код
} catch (FormatException ex) {
Console.WriteLine("Неверный формат: " + ex.Message);
} catch (DivideByZeroException ex) {
Console.WriteLine("Деление на ноль: " + ex.Message);
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍11🤝5👎2
📖Паттерны проектирования для C# и платформы .NET Core
⬇️ Скачать книгу
➡️ C# Ready | #книга
В этой книге подробно рассматриваются эффективные способы применения паттернов проектирования на языке C# и платформе .NET Core.
Автор: Арораа Г., Чилберто Д
Год: 2021
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥4🤝2👎1
В этом посте мы рассмотрели некоторые варианты работы с асинхронностью, это важный момент при написании оптимизированных программ:
• Оператор await
• Объявление асинхронного метода с async
• Обработка ошибок, при асинхронном программировании нужно быть бдительным к данным, поэтому очень важно отлавливать ошибки
Особенности и использование смотри в картинках выше!
🔥 — если узнал новое
🤝 — если уже пользовался
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥41🤝26👍5👎2
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝40🔥12👍7
This media is not supported in your browser
VIEW IN TELEGRAM
CodeWars — одна из лучших платформ с различными заданиями по программированию, вы можете улучшать свой ранг, выполняя практические задания прямо на сайте.
📌 Ссылочка: codewars.com
➡️ C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17🤝5
В языке C# ключевое слово dynamic кажется универсальным инструментом для создания переменных без строгой типизации. Но этот гибкий подход может скрывать немало подводных камней
Например, если вы создаете переменную так:
dynamic number = "42";
Console.WriteLine(number + 5);
На первый взгляд, можно предположить, что результатом будет число 47. Но
dynamic
откладывает проверку типов на момент выполнения. В итоге вызов number + 5
даст ошибку во время выполнения, так как number
— это строка, а не число.Теперь попробуем преобразование:
dynamic text = "42";
int result = int.Parse(text);
Console.WriteLine(result + 5); // Результат: 47
В этом примере ошибок не будет, так как явно указан метод
int.Parse
. Но из-за динамической природы text
этот код все равно может повести себя непредсказуемо, если исходное значение text
изменится на что-то другое.Почему важно осторожное использование dynamic? Главная сложность — отсутствие проверки типов на этапе компиляции. В небольших скриптах это может быть удобно, но в крупных проектах это может привести к трудностям в отладке и неочевидным ошибкам.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍4😁1
📖 Язык программирования C# 6.0 и платформа .NET 4.6
⬇️ Скачать книгу
➡️ C# Ready | #книга
В этой книге рассматриваются ключевые аспекты языка C# 6.0 и платформы .NET 4.6, акцентируя внимание на новых возможностях и улучшениях, которые делают разработку более эффективной и удобной
Автор: Эндрю Т. Филипп Д.
Год: 2017
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍4
Рассмотрим некоторые варианты оптимизации кода с помощью сегмента памяти, в списках и массивах:
1. Использование сегмента памяти для работы с массивами —
Span<T>
позволяет эффективно работать с сегментами массивов или строк без выделения дополнительной памяти:int[] arr = { 1, 2, 3, 4, 5 };
Span<int> span = arr.AsSpan().Slice(1, 3); // [2, 3, 4]
Console.WriteLine(span.ToArray()); // вывод: 2 3 4
2. Использование списка для уменьшения перераспределений — Если заранее известно, сколько элементов будет в списке, можно установить емкость списка, чтобы избежать лишних перераспределений памяти:
List<int> list = new List<int>(1000); // заранее выделяем память
list.Add(1);
Console.WriteLine(list.Capacity); // вывод: 1000
3. Использование словаря для поиска по ключу — Вместо использования линейного поиска в списке, использование
Dictionary
обеспечивает быстрый доступ к данным по ключу за время O(1):Dictionary<string, int> dict = new Dictionary<string, int>
{
{ "apple", 1 },
{ "banana", 2 },
{ "cherry", 3 }
};
Console.WriteLine(dict["banana"]); // вывод: 2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥5🤝3