TGStat
TGStat
Type to search
Advanced channel search
  • flag English
    Site language
    flag Russian flag English flag Uzbek
  • Sign In
  • Catalog
    Channels and groups catalog Regional compilations Thematic compilations Платные каналы Search for channels
    Add a channel/group
  • Ratings
    Rating of channels Rating of groups Posts rating
    Ratings of brands and people
  • Analytics
  • Search by posts
  • Telegram monitoring
  • Promotion
    Advertising through Yandex Business Advertising in channels through TGStat Agency Advertising on TGStat.ru website
Чат .NET Разработчиков

6 Oct, 10:03

Open in Telegram Share Report

Forward from: .NET Разработчик
День 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
Catalog
Channels and groups catalog Channels compilations Search for channels Add a channel/group
Ratings
Rating of Telegram channels Rating of Telegram groups Posts rating Ratings of brands and people
API
API statistics Search API of posts API Callback
Our channels
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Read
Академия TGStat Telegram Research 2019 Telegram Research 2021 Telegram Research 2023
Contacts
Справочный центр Support Email Jobs
Miscellaneous
Terms and conditions Privacy policy Public offer
Our bots
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot