Thread-safe object cache, for read, high performance in .NET
the .NET Dictionary is thread-safe, as long as it is used only in read access, thus not requiring locks in reading methods. 


You are playing with fire here.  Your statement is only true iff no thread will modify the dictionary.  If any of them do, which is about impossible to avoid in a cache, then a lock on both the reading and the writing code is required.  A natural consequence of not being able to reliably read a data structure while it is in the process of being modified.

The ReaderWriterLock/Slim classes were designed to provide you this kind of locking.  You must acquire a reader lock when you read, a writer lock when you write.  Multiple threads can acquire a reader lock so you won't have any serious overhead as long as the cache is productive. The Slim version uses a low cost locking primitive which can reduce the lock cost somewhat.  But it is no cure when there's a lot of write contention, no magic formula exists for that.  If you do have a lot of write contention then double-check if the old ReaderWriterLock may give better throughput.

And be sure to checkout the .NET 4 MemoryCache class.