2011-11-10 4 views
0

Pour une propriété dans ViewModel, une propriété peut être définie comme (C#): private MyClass _myclass;Comment nettoyer la mémoire pour la propriété?

public MyClass Myclass{ 
    get { return _myclass;} 
    set { 
     if(value!=_myclass) 
     { 
     _myclass = value 
     RaisePropertyChanged("Myclass"); 
     // do something else..... 
     } 
    } 
} 

Ensuite, je veux libérer la mémoire lorsque l'instance n'est plus utilisée. Quelle est la bonne façon?

_myclass = null; 
RaisePropertyChanged("Myclass"); 

ou

Myclass = null; 

ou

_myclass = null; 
Myclass = null; 
+1

Faites-en une IDisposable? – BoltClock

+0

Oui, c'est ce que je veux. – KentZhou

+1

Si l'instance n'est plus utilisée (tout code ne la référencera pas) elle sera GCed automatiquement donc vous n'avez pas besoin d'assigner 'null' vous-même, si MyClass utilise des ressources comme les fichiers implémentent IDisposable et disposent explicitement – sll

Répondre

0

Votre deuxième option devrait fonctionner correctement.

Myclass = null; 

La première option est inutilement non DRY. Et la troisième option n'élèvera pas PorpertyChanged.

1

Vous ne pouvez pas vraiment déterminer quand la mémoire de votre objet sera libérée (c'est au garbage collector de décider), mais bien sûr il ne sera libéré que s'il n'y a plus de références. Vous devez le définir sur null en utilisant l'accesseur de jeu de propriétés. Il va augmenter la notification de changement pour vous.

Myclass = null; 

Remarque: Ceci s'applique aux classes gérées pures. Si votre classe utilise des ressources non gérées, vous devez implémenter IDisposable.

Questions connexes