10
votes

Connexion C #: Obtenir la performance de la classe / de la méthode

J'ai récemment été chargé d'ajouter des instructions de journalisation à chaque méthode appeler dans une solution. Ces entrées de journal doivent contenir le nom de la classe et de la méthode.

Je sais que je peux utiliser méthodybase.getcurrentMethod () et le pileFrame.getMethod () méthodes. Ce qui est mieux? Y a-t-il un moyen meilleur (ou plus performant) d'obtenir le nom de la classe et de la méthode?


4 commentaires

chaque méthode ? Il existe des moyens plus facilement de rendre votre application dix mille fois plus lente ou de générer un gigaoctet de texte une minute.


Mon sort dans la vie est seulement de faire ce que le client demande.


Il existe une place dans la relation de conseil pour des critiques constructives et, en fait, c'est une partie importante du travail. J'ai travaillé sur des projets qui avaient ce genre de journalisation oligo-oligo-echolique et il est généralement abouti à tous ignorer les journaux à moins qu'ils ne devaient absolument prendre les plusieurs heures, il faudrait creuser.


@Dan, je l'ai mentionné. J'ai généralement la même expérience avec ce genre de journalisation. Il est généralement nécessaire que cela indique une question de conception beaucoup plus profonde (qui a définitivement ce projet). Le facteur primordial est que vous devez prendre la voie la plus efficace pour expédier le logiciel. Je déteste l'admettre, mais dans ce cas, le client a raison.


3 Réponses :


1
votes

this.getType (). Tostring () devrait vous obtenir la classe

À propos de la méthode Il semble que StackFrame et la méthodebase sont les solutions les plus obtenues, je ne peux pas commenter sur lequel est plus efficace.


2 commentaires

Devrait-il être cela.getType (). Tostring ()? ou est-ce que je manque autre chose


Objet.tostring () retournera le nom de la classe sauf si la touche () était remplacée.



5
votes

J'ai deux suggestions:

  1. Utilisez des frameworks AOP prêt à l'emploi (comme http://www.sharpscrafters.com/ ) Ils peuvent gérer cela facilement
  2. Faites une action Prebuild personnalisée où vous remplacez une sorte de talon au début de chaque méthode:

    VOI PERFORMATIONSOCTION () { // put_logging_here }

    Ensuite, dans l'outil personnalisé, remplacez ces talons avec des noms de méthodes. Ceci est la méthode la plus rapide garantie, mais nécessite des investissements.


1 commentaires

Serais-ce que je pouvais, j'ai déjà élevé cette suggestion. Pas que ce n'est pas un excellent point.



8
votes

Eh bien, le moyen le plus rapide / le plus rapide est d'inclure une chaîne dans chaque fonction. Cela peut ne pas apparaître la solution la plus pratique, mais Methodbase.getCurrentMethod () nécessite un codage à l'intérieur de chaque méthode qui l'utilise quand même. c'est-à-dire que vous pouvez écrire xxx

ou vous pouvez écrire xxx

maintenant, si vous souhaitez obtenir le nom de la fonction Appelé la fonction actuelle (c'est-à-dire que vous souhaitez le faire dans une seule place de votre fonction de journalisation), votre seule option est la seule lecture via la charme de la pile.


2 commentaires

Si je me souviens bien, Methodbase.getCurrentMethod () peut également renvoyer différents résultats sur la base de tout inlinge / optimisation effectué par le compilateur, les noms de fonction de code de code horaire peuvent donc être plus fiables dans ce sens.


Vous pouvez automatiser le nom de la fonction, y compris la chaîne au processus de construction.