Подтвердить что ты не робот

Только для чтения Словарь - несколько потоков, вызывающих метод .ContainsKey

У меня есть статический словарь readonly. Нет в этот словарь будут внесены изменения.

У меня есть несколько потоков, читающих этот словарь с помощью .ContainsKey(Key). например.

class MyData
{ 
    private static private IDictionary<int, string> _dictionary = new Dictionary<int, string>();

    MyData()
    {
        // Load Dictionary here
    }

    public string GetValue(int key)
    {
        if (_dictionary.ContainsKey(key))
        { 
            return _dictionary[key];   
        }
    }
}

Существуют ли какие-либо проблемы с потоками?

4b9b3361

Ответ 1

Если никто не мутирует это: все в порядке. Если бы случались редкие изменения, возможно, посмотрите на ReaderWriterLockSlim или (мое предпочтение) отредактируйте снимок/копию и замените ссылку.

Ответ 2

Это безопасно, если вы только прочитаете.

Ответ 3

Если вы должны были писать данные одновременно (и вы использовали .NET 4.0), вы могли бы использовать ConcurrentDictionary

Ответ 4

если все "добавление" будет завершено, прежде чем вы прочитаете из нескольких потоков, тогда это будет хорошо. Просто потому, что его readonly не означает, что его потокобезопасность - это не так.

Возможно, пользователь должен ReaderWriterLock синхронизировать доступ