Sobes.tech
Middle

Există un dicționar static și vrem să scriem în el din mai multe fire. Care este cea mai bună metodă?

sobes.tech AI

Răspuns de la 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, что может привести к блокировкам и снижению производительности.