Sobes.tech
Back to questions
Middle
6

Есть статичный словарь, мы хотим писать в него из разных потоков. Как лучше это сделать?

Companies where asked
OZONOZON

Answer from AI

sobes.tech AI

Для безопасной записи в статичный словарь из разных потоков в C# лучше использовать класс ConcurrentDictionary<TKey, TValue>. Он специально разработан для потокобезопасной работы с коллекциями и позволяет одновременно читать и писать без блокировок, что повышает производительность по сравнению с обычным словарём с внешней синхронизацией.

Пример использования:

using System.Collections.Concurrent;

static class MyStaticClass
{
    private static ConcurrentDictionary<string, int> _dict = new ConcurrentDictionary<string, int>();

    public static void AddOrUpdate(string key, int value)
    {
        _dict.AddOrUpdate(key, value, (k, oldValue) => value);
    }

    public static bool TryGetValue(string key, out int value)
    {
        return _dict.TryGetValue(key, out value);
    }
}

Если по каким-то причинам нужно использовать обычный Dictionary, то придётся оборачивать доступ к нему в блоки lock, что может привести к блокировкам и снижению производительности.