2009-07-16 4 views
2

Disons que j'ai une collection de classe qui contient une liste d'éléments.Dois-je m'inquiéter de libérer des ressources dans ce cas?

public class Collection 
{ 
    private List<Item> MyList; 
    //... 
} 

J'ai plusieurs instances de cette classe de collection qui ont toutes des listes de tâches différentes mais partagent des éléments. Par exemple: Il y a 10 articles, Collection1 références Articles 1-4, Collection2 a Articles 2-8 et Collection3 4,7,8 et 10 sur sa liste.

J'ai implémenté ceci comme suit: J'ai une liste globale qui contient tous les éléments disponibles. Avant de créer une nouvelle collection, je vérifie s'il y a déjà des éléments dont j'ai besoin dans cette liste - sinon je crée l'objet et je l'ajoute à la liste globale (et à la collection bien sûr). Le problème que je vois est que ces éléments ne seront jamais libérés - même si toutes les collections sont disparues, la mémoire qu'elles consomment n'est toujours pas libérée parce que la liste globale les référence toujours. Est-ce que c'est quelque chose dont je dois m'inquiéter? Si oui, que dois-je faire? J'ai pensé à ajouter un compteur à la liste globale pour voir quand un élément n'est plus nécessaire et supprimer sa référence.

Éditer: C'est en fait un problème de conception, je pense. Je vais rejeter l'idée d'une liste globale et à la place faire une boucle à travers toutes les collections et voir si elles ont déjà l'élément nécessaire.

Répondre

1

Cela ressemble à un petit problème de conception, avez-vous vraiment besoin de la liste globale? En dehors des références faibles que mentionne Jon, vous pouvez également reconstruire périodiquement la liste globale (par exemple après avoir supprimé une collection) ou la construire uniquement dynamiquement lorsque vous en avez besoin et la relâcher à nouveau.

Vous devrez décider quelle méthode est la plus appropriée, nous n'avons pas assez de contexte ici.

2

Si la liste globale nécessite références aux articles, vous ne pouvez pas les libérer de manière réaliste. Avez-vous réellement besoin de références aux éléments de la liste globale? Quand devriez-vous logiquement être en mesure de supprimer des éléments de la liste globale?

Vous pouvez envisager d'utiliser weak references dans la liste globale et d'élaguer périodiquement les valeurs WeakReference elles-mêmes si leurs référents ont été collectés.

+0

Merci de mentionner les références faibles - je ne les connaissais pas. Mais je ne pense pas qu'ils sont pertinents pour mon problème. – CaptainProton

Questions connexes