Regarding ReaderWriterLockSlim and ConcurrentDictionary:

The ConcurrentDictionary uses a lock (the [Monitor](http://msdn.microsoft.com/en-us/library/system.threading.monitor.aspx) class) internally, but the lock is held for a very short period (only when manipulating an item in the collection).

If you always need mutual exclusive access for both reads and writes I think you should use the ConcurrentDictionary class.

If you need mutual exclusive access for writes (but all threads may access the dictionary in a read-only fashion) then you may guard the existing implementation using the ReaderWriterLockSlim class.