Existe-t-il un moyen d'associer de manière généralisée une instance d'objet (objet A) à un second objet (objet B), de sorte que lorsque B est collecté, A devient éligible à la collecte? Le même comportement qui se produirait si B avait une variable d'instance pointant vers A, mais sans changer explicitement la définition de classe de B, et être capable de le faire de manière dynamique?Association d'un objet à un autre objet pour la correction GC
Le même genre d'effet pourrait être fait en utilisant l'événement Component.Disposed de manière génial, mais je ne veux pas faire usage unique B
EDIT
Je crée essentiellement un cache d'objets associés à un seul objet 'root', et je ne veux pas que le cache soit statique, car il peut y avoir beaucoup d'objets racine utilisant des caches différents, donc beaucoup de mémoire sera utilisée quand une racine l'objet n'est plus utilisé mais les objets mis en cache sont toujours présents. Donc, je veux qu'une collection d'objets en cache soit associée à chaque objet 'root', sans changer la définition de l'objet racine. Tri de métadonnées similaires d'une référence d'objet supplémentaire attachée à chaque instance d'objet racine. De cette façon, chaque collection sera collectée lorsque l'objet racine est collecté, et ne restera pas comme si un cache statique était utilisé.
Si je comprends bien, il y a un défaut de conception ici. Donc, si vous avez le cache A avec l'objet B, et que l'objet Z fait référence à l'objet B, vous dites que lorsque A disparaît, vous voulez que B disparaisse aussi? Qu'est-ce qui est censé arriver à la référence de Z à B? –
Il n'y aura pas de références aux objets mis en cache en dehors de l'objet racine. Et s'il y en avait, je voudrais que les références CLR normales soient vérifiées pour s'assurer qu'elles ne sont pas collectées :) – thecoop
Si le A a la seule référence à B, alors B devient automatiquement éligible pour la collecte quand A est collecté car il n'y aura plus être des références à B. –