Frage Nur Lesewörterbuch - Mehrere Threads, die die .ContainsKey-Methode aufrufen


Ich habe eine statische schreibgeschützt Wörterbuch. Nein Änderungen werden an diesem Wörterbuch vorgenommen.

Ich habe mehrere Threads gelesen aus diesem Wörterbuch mit dem .ContainsKey (Key). z.B.

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];   
        }
    }
}

Gibt es Gewindeprobleme damit?


23
2017-11-26 16:42


Ursprung


Antworten:


Wenn niemand mutiert: Das ist in Ordnung. Wenn da wären gelegentlich edits, dann vielleicht ReaderWriterLockSlim, oder (meine Präferenz) bearbeiten Sie einen Snapshot / Kopie und tauschen Sie die Referenz.


19
2017-11-26 16:44



Es ist sicher, wenn Sie nur lesen werden.


3
2017-11-26 16:44



Wenn Sie gleichzeitig Daten schreiben (und Sie .NET 4.0 verwenden), könnten Sie das verwenden ConcurrentDictionary


2
2017-11-26 16:46



Wenn alles "Hinzufügen" abgeschlossen ist, bevor Sie von mehreren Threads lesen, ist es in Ordnung. Nur weil es readonly nicht bedeutet, dass es threadsicher ist - was es nicht ist.

Vielleicht sollten Sie Benutzer ReaderWriterLock um den Zugriff zu synchronisieren


1
2017-11-26 16:46