La Liste méthode Clear() de détruire des enfants [C#.NET]?
Si je crée un appel récursif à la liste de listes:
class myList
{
List<myList> childLists;
List<string> things;
//...
}
List<myList> tempList = new List<myList>();
Et puis plus tard, appelez tempList.Clear(), il va détruire tous les childLists dans la mémoire, ou devrais-je créer une méthode récursive pour effacer tous les childLists premier?
OriginalL'auteur Jon Smock | 2008-11-10
Vous devez vous connecter pour publier un commentaire.
Si aucune autres références existent pour l'enfant, listes, ils seront nettoyés comme d'habitude. L'astuce est de regarder pour tout en balançant les références à l'enfant les éléments (databinding en particulier a tendance à passer inaperçu une fois fait).
OriginalL'auteur Godeke
Vous semblent provenir d'une C++ arrière-plan.
Une lecture sur .NET de la Collecte des Ordures devrait clairement beaucoup de choses pour vous.
Dans votre cas, vous n'avez pas besoin de "détruire" tous les enfants des listes. En fait, vous ne pouvez même pas de détruire ou de disposer d'une Liste générique d'objet vous-même dans des conditions normales de bonne pratique .NET. Si vous ne souhaitez plus l'utiliser, puis il suffit de supprimer toutes les références à celui-ci. Et le une véritable destruction de l'objet qui va être fait par le garbage collector (aka GC) lorsqu'elle le juge approprié.
La GC est aussi très intelligent, il va détecter circulaire-références et un->b->c->objet d arbres et la plupart des choses que vous pourriez venir jusqu'à elle et à nettoyer l'ensemble de l'objet graphique. Si vous n'avez pas besoin de créer cette récursive de nettoyage de routine.
Mais notez que le GC a un comportement undeterministic, c'est à dire que vous ne savez pas quand le "nettoyage" qui va se passer, si votre liste contient d'importantes ressources qui devraient être libérés immédiatement, c'est à dire les descripteurs de Fichiers, de connexions de base de données, alors vous devez explicitement "Débarrasser" d'elle, comme @lassevk recommandé.
OriginalL'auteur chakrit
Vous n'avez pas besoin d'effacer les sous-listes.
La seule chose que vous avez à faire est de si les objets dans votre liste implémente IDisposable, alors vous devriez faire une itération sur les objets et appelez-le .Méthode dispose() avant de l'effacer de la liste.
OriginalL'auteur Lasse Vågsæther Karlsen
Vous pouvez définir la liste d'objet à null!
Vérifier http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/31809230-83f6-4e86-9a33-ee7dc4ec2b10
OriginalL'auteur Pooran