Est-il possible dans .net d'obtenir toutes les instances de type concret créées dans l'application? Je suppose que ces informations sont stockées dans GC, mais est-ce accessible à partir du code?.Net: Est-il possible d'obtenir des instances d'objet créées plus tôt par type de classe?
Répondre
Consultez le blog de Raymond Chen pour savoir pourquoi c'est une mauvaise idée (sauf pour le débogage). http://blogs.msdn.com/b/oldnewthing/archive/2010/08/12/10049155.aspx
Et pour la mettre en œuvre, vous aurez besoin de marcher tous objets sur le tas, car il est peu probable que le CLR garde la trace de l'objet par type, donc il serait très lent.
Non, ce n'est pas disponible normalement. Il est possible que l'API de débogage/profilage vous permette d'obtenir ceci (évidemment seulement les instances non encore collectées) mais pas dans le code normal.
Vous ne savez pas quel est votre scénario, mais je ne vois pas quand cette information serait utile. Aussi quelle serait la portée d'une telle information, fil? domaine de l'application? Assemblée? Par exemple, cela n'a aucun sens de dire de me donner une liste de tous les objets int dans le domaine de l'application, n'est-ce pas?
Si c'est pour un certain type que vous avez créé, vous pouvez contraindre la création d'objets de ce type en utilisant une sorte de classe de fabrique. Là, vous pouvez garder une trace de tous les objets qui sont instanciés pour votre type donné.
Espérons que cela aide.
Scope serait domaine de l'application, toute autre chose n'a aucun sens du tout. Et cela aurait du sens pour le débogage lié au GC. Et je m'attendrais à une API de débogage/profilage qui fait quelque chose comme ça. – CodesInChaos
Je peux penser à quelques problèmes de sécurité possibles que cela pourrait apporter. – luiscubal
Bien sûr, il ne serait disponible que dans un code de confiance marqué comme étant critique pour la sécurité. – CodesInChaos