Explicitement la libération de la mémoire en c#

J'ai créer une application en c# qui utilise jusqu'à 150 mo de mémoire (en octets privés), principalement en raison d'un gros dictionnaire:

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

Je me demandais comment faire pour libérer cette mémoire. J'ai essayé ceci:

Txns = null;
GC.Collect();

Mais il ne semble pas faire beaucoup de trou dans ma octets privés - ils abandonnent de dire 155mb à 145mb.
Toute indices?

Grâce

-edit-

Bon, je vais avoir plus de chance avec ce code (il reçoit les octets privés vers le bas à 50 mo), mais pourquoi?

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

-edit-

Bon pour tout le monde qui dit " ne pas utiliser GC.collect", juste assez (je ne vais pas le débat, autre que de dire que vous pouvez le voir mon C en arrière-plan à venir à travers, mais il n'a pas vraiment répondu à ma question:
Pourquoi ne le garbage collector seulement de libérer de la mémoire, si je la liste des transactions en premier? Ne devrait-il pas libérer de la mémoire, de toute façon, depuis le dictionnaire a été déréférencé?

  • GC.Collect() ne pas appliquer que la quantité de mémoire qui pourrait être recueillis sont recueillies lors de la collecte des déchets est un processus multi-étapes. Un processus que je pourrais ajouter que vous n'avez généralement pas besoin de savoir les détails à propos de...
  • Est-il nécessaire de mettre en Txns null, ça va faire une différence? ou tout simplement de Compensation le contenu est assez(pour libérer de la mémoire)?
InformationsquelleAutor Chris | 2009-05-05