Compter les Instances de la Classe
Je suis à la recherche d'un moyen de par programmation d'obtenir le nombre d'instances d'un certain type de classe .NET et Java.
Dire par exemple j'ai la classe Foo. Je veux être capable, dans le même processus, obtenir un compte courant de toutes les instance de Foo.
Cependant je ne peux pas modifier Foo, si un static int avec le comptage. Aussi je ne peux pas ajouter tous cas je faire de certains de liste statique et le comte. Je veux être capable de dire simplement:
System.GC.numberOf< Foo >()
ou quelque chose.
Je regardais à travers les ramasseurs d'ordures, mais je ne pouvais pas trouver toutes les méthodes pertinentes.
il y a des doublons. de recherche autour de.
il y a des questions similaires, mais les réponses toujours impliquer une modification de la classe avec une sorte de contre. Je veux compter les instances de classes je n'ai pas de définir ou de contrôle
eh bien, vous ne pouvez pas. c'est également indiqué dans les réponses à certaines questions.
Le suivi du nombre d'objets que vous créez dans le code, vous ne le contrôle.
J'ai utilisé des outils de compter des occurrences d'objets dans des processus à distance, très utile pour le suivi des fuites. J'espère qu'il y a un moyen de répliquer cette logique dans le même programme à des fins de test
il y a des questions similaires, mais les réponses toujours impliquer une modification de la classe avec une sorte de contre. Je veux compter les instances de classes je n'ai pas de définir ou de contrôle
eh bien, vous ne pouvez pas. c'est également indiqué dans les réponses à certaines questions.
Le suivi du nombre d'objets que vous créez dans le code, vous ne le contrôle.
J'ai utilisé des outils de compter des occurrences d'objets dans des processus à distance, très utile pour le suivi des fuites. J'espère qu'il y a un moyen de répliquer cette logique dans le même programme à des fins de test
OriginalL'auteur Charles | 2011-04-12
Vous devez vous connecter pour publier un commentaire.
Encore un peu exotique façon de le faire serait d'utiliser orientée aspects techniques de l'instrument le constructeur(s) de la ou des classe(s) en question. Jetez un oeil à AspectJ, par exemple.
Va tourner pour cette solution, car je peux probablement l'instrument .net classes aussi à quelques autres de la même manière.
OriginalL'auteur mazaneicha
Si vous ne pouvez pas modifier la classe directement (peut-être parce qu'il est intégré dans la classe?), pourriez-vous créer un wrapper, ou une sous-classe qui hérite de l'original?
Cet exemple est en Java et peut avoir quelques problèmes de syntaxe car je suis un peu rouillé.
De sûr, vous devriez être sûr de redeclare tous vos
foo
commesubFoo
dans tout le reste de votre code.OriginalL'auteur Joshua Carmody
Avez-vous le contrôle de la façon dont la machine virtuelle Java est en cours d'exécution? Si oui, vous pouvez écrire un moyen rapide et sale débogueur agent... http://download.oracle.com/javase/1.5.0/docs/guide/jvmti/jvmti.html#writingAgents
Voir les événements "VM Allocation des Objets" et "Objet Libre"
OriginalL'auteur Dilum Ranatunga
Comme déjà dit, il y a des questions similaires dans la.
Un hack vous pouvez utiliser - un gros OMI - est de changement la
Object
classe: voir cette réponseRésumé:
OriginalL'auteur Carlos Heuberger
Rapide et sale: si vous ne pouvez pas modifier la classe, peut-être vous pouvez simplement mettre un compteur dans une autre partie du projet, l'incrémentation lorsque vous instanciez classe dit?
OriginalL'auteur Lupuss