Liberación explícita de memoria en c #

He creado una aplicación C # que utiliza hasta 150 MB de memoria (bytes privados), principalmente debido a un gran diccionario:

Dictionary<string, int> Txns = new Dictionary<string, int>();

Me preguntaba cómo liberar este recuerdo. He intentado esto:

Txns = null;
GC.Collect();

Pero no parece hacer mella en mis bytes privados, caen de, digamos, 155mb a 145mb. ¿Alguna pista

Gracia

-editar

Bueno, estoy teniendo más suerte con este código (reduce los bytes privados a 50 mb), pero ¿por qué?

Txns.Clear(); // <- makes all the difference
Txns = null;
GC.Collect();

-editar

Está bien para todos los que dicen 'no use GC.collect', bastante justo (no voy a debatir eso, aparte de decir que puede ver mi fondo C), pero en realidad no responde a mi pregunta : ¿Por qué el recolector de basura solo libera la memoria si borro primero la lista de transacciones? ¿No debería liberar la memoria de todos modos, ya que el diccionario ha sido desreferenciado?

Respuestas a la pregunta(9)

Su respuesta a la pregunta