The only other idea that I could come up with if you really want to save memory usage would be to store the dictionary in a stream and compress it. Factors to consider are how often you access and upload this data, and how much the data is compressed. Text from newspaper articles will compress very well, and the performance hit may be less than you think.
Using an open source library like SharpZipLib ( http://www.icsharpcode.net/opensource/sharpziplib/ ), your code will look something like this:
MemoryStream stream = new MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, ListaDigramas); byte[] dictBytes = stream.ToArray(); Stream zipStream = new DeflaterOutputStream(new MemoryStream()); zipStream.Write(dictBytes, 0, dictBytes.Length);
To inflate, you need an InflaterInputStream and a loop to inflate a stream in pieces, but it's pretty simple.
You will need to play with the application to make sure that the performance is acceptable. Remember, of course, that you will need enough memory to store the dictionary when you inflate it for use (unless someone has a clever idea to work with the object in a compressed state).
Honestly, keeping it as it is in memory and allowing Windows to swap it for a sample file is probably your best / fastest option.
Edit
I never tried, but you could serialize directly in the compression stream, which means that the overhead for compression is minimal (you still have overhead for serialization):
MemoryStream stream = new MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); Stream zipStream = new DeflaterOutputStream(new MemoryStream()); formatter.Serialize(zipStream, ListaDigramas);
source share