Yo diría que tienes las siguientes opciones.
Algunas nuevas clases Framework 4.0:
- ConcurrentDictionary. Trabaja rápido y confiable.
- ConcurrentBag. Es colección no ordenada de objetos, por lo que funciona más rápido, pero se adapta si no necesita solo la clasificación.
- ConcurrentStack. Es una implementación de la estructura de datos clásica LIFO (último en entrar, primero en salir) que proporciona acceso seguro para subprocesos sin necesidad de sincronización externa
- ConcurrentQueue. Es un hilo seguro FIFO (primero en entrar, primero en salir) colección.
Todas las novedades 4.0 clases trabajar más rápido, pero tienen algunas características mencionadas por levanovd. Comparación de rendimiento de estas clases puede encontrar here.
Algunas soluciones clásicas de versiones anteriores:
- diccionario + Monitor. Envoltura simple a cerradura
- Diccionario + ReaderWriterLock. Mejor que el anterior, porque tiene bloqueos de lectura y escritura. Entonces, varios hilos pueden leer, y solo uno: escribir.
- Diccionario + ReaderWriterLockSlim. Es solo la optimización del anterior.
- Hashtable. Desde mi experiencia, es el método más lento. Consulte el método Hashtable.Synchronized(), es una solución lista para usar de Microsoft.
Si tuviera una restricción de la utilización de la versión 3.5 Marco, me gustaría utilizar Diccionario + ReaderWriterLock o ReaderWriterLockSlim.
Dependerá mucho de la situación. –
Posible duplicado de [diccionario-bloqueo-vs-concurrentdiccionario] (http://stackoverflow.com/questions/1949131/net-dictionary-locking-vs-concurrentdictionary) –