TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • flag Russian
    Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
.NET Разработчик

6 Oct, 10:03

Открыть в Telegram Поделиться Пожаловаться

День 2806. #ЗаметкиНаПолях
Типы Коллекций в .NET, Которые Стоит Попробовать. Начало

Большинство разработчиков ежедневно используют List и Dictionary. Однако в .NET есть и специализированные коллекции, способные сделать код быстрее, безопаснее и проще в сопровождении. Рассмотрим некоторые из них, о которых стоит знать каждому .NET-разработчику.

1. HashSet
Многие разработчики используют List для проверки наличия элемента.
if(users.Contains(id))
Проблема в том, что List.Contains() выполняет линейный поиск. HashSet использует хэширование для гораздо более быстрого поиска:
var permissions =
new HashSet
{
"Read",
"Write",
"Delete"
};
Console.WriteLine(
permissions.Contains("Write"));

Где использовать:
- выявление дубликатов,
- проверка наличия прав доступа,
- быстрый поиск.

См. подробнее про HashSet

2. PriorityQueue
Нужно первым делом обработать элемент с наивысшим приоритетом?
Вместо того чтобы постоянно сортировать список, используйте PriorityQueue:
var queue = new PriorityQueue();
queue.Enqueue("Low", 3);
queue.Enqueue("Medium", 2);
queue.Enqueue("High", 1);
while (queue.Count > 0)
Console.WriteLine(queue.Dequeue());

// Вывод:
// High
// Medium
// Low

Где использовать:
- планировщики заданий,
- обработка задач,
- алгоритмы маршрутизации,
- поиск пути в системах ИИ,
- моделирование событий.

См. подробнее про PriorityQueue

3. ConcurrentDictionary
Обычный словарь (Dictionary) не является потокобезопасным. Если несколько потоков будут одновременно читать и записывать данные, это неизбежно приведёт к возникновению исключений или нарушению целостности данных.
ConcurrentDictionary решает эту проблему:
using System.Collections.Concurrent;

var cache = new ConcurrentDictionary();
Parallel.For(0, 1000, i =>
{
cache.TryAdd(i, $"User {i}");
});
Console.WriteLine(cache.Count);

Почему не использовать блокировку?
Вместо:
lock(_lock)
{
dictionary.Add(...);
}
Используйте:
cache.TryAdd(key, value);
- яснее,
- быстрее,
- безопаснее.

Где использовать:
- кэширование,
- фоновые сервисы,
- параллельная обработка.

См. также Использование потокобезопасных коллекций

Окончание следует…

Источник:
https://medium.com/turbo-net/7-dotnet-collections-youre-probably-not-using-but-should-a76437aa6a62

734 2 14 13
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot