2009-10-07 4 views
1

.NET 3.5, j'ai des classes qui stockent jusqu'à 1 Mo de chaînes. Même si j'ai besoin de l'objet depuis très longtemps, je n'ai pas besoin de stocker la chaîne pendant longtemps.Effacement de grands champs de la mémoire dans des objets de longue durée

Comment puis-je vraiment supprimer la chaîne de la mémoire sans disposer de l'objet parent.

Est-ce une bonne pratique d'utiliser "myString = null" dans ce cas? ou doit envelopper dans une classe privée déposable ou quelque chose?

Répondre

2

IDisposable n'a rien à voir avec la gestion de la mémoire. Assigner null à une variable privée fera très bien l'affaire. Et voyez si Flyweight vous convient.

0

Avez-vous considéré WeakReference?

+0

Je l'ai réellement implémenté, mais je n'ai pas aimé le changer en cache personnalisé. Le problème pour être honnête je ne suis pas tout à fait sûr où la fuite de mémoire est, peut-être mes chaînes sont hors de la mémoire très bien. Impossible de trouver un profileur de mémoire approprié capable de profiler une application complexe. –

+2

Voir: http://msdn.microsoft.com/fr-fr/library/ms404247.aspx. Comme le dit l'article, «évitez d'utiliser des références faibles comme solution automatique aux problèmes de gestion de la mémoire, mais développez une stratégie de mise en cache efficace pour gérer les objets de votre application». – MusiGenesis

+1

@MusiGenesis c'est pourquoi j'ai changé le design :) –

0

Il est possible que vous référeniez ou copiez la chaîne ailleurs dans le programme (comme dans une TextBox?), Ce qui la maintient en vie en mémoire.

+0

J'ai essayé de les traquer, jusqu'ici pas de chance dans ce département :) –

Questions connexes