ReaderWriter Synchronization
For this:


try
{
    readerWriterLock.EnterWriteLock();
    //do stream stuff here
}
finally
{
    readerWriterLock.ExitWriteLock(); 
}



EnterWriteLock should be before the try statement.


  Suppose the EnterWriteLock() fails. For whatever reason.
  Then the one thing you shouldn't do is to Exit a lock you never Entered. 


Source: C# - Lock question using EnterWriteLock
Please note that singleton nowadays is rather an antipattern. They make testing harder and often hide dependencies which leads to spaghetti code which is really hard to work with. What is so bad about singletons?