2009-06-17 4 views
3

Je fais du réglage dans une très grande application. Existe-t-il un moyen de mesurer le nombre d'événements déclenchés dans une application? Par exemple en utilisant quelque chose dans System.Diagnostics? L'ajout de code à l'intérieur des événements n'est PAS une solution acceptable en raison de la taille de l'application.Mesurez le nombre d'événements déclenchés?

Il existe des outils de profilage, mais l'approche simple et rapide pour moi serait trouvé quelque chose dans .Net

Répondre

0

Ceci est une question très intéressante.

Il n'y a vraiment aucun moyen facile de suivre les événements sans code supplémentaire. Cela ne signifie pas que l'ajout du code doit être dur ou un porc de performance.

Si tous vos événements utilisent des eventArgs personnalisés, vous pouvez ajouter au constructeur une simple instruction de journalisation qui vous permettra de compter à chaque fois que vous créez l'un des eventArgs personnalisés. Si vous n'utilisez pas eventArgs personnalisé, vous pouvez facilement étendre eventArgs avec une classe customEventArgs qui effectue exactement ce comptage. Il suffit d'étendre le constructeur pour mettre à jour une variable statique que vous pouvez écrire dans un journal de temps en temps. Ensuite, en utilisant un refactor rapide, vous pouvez renommer tous vos eventArgs par défaut pour ce nouveau customEventArgs légèrement différent. Cela prendrait toutes les 10 minutes et ne casserait aucun code existant. Cependant, si vous savez qu'un profileur peut le faire, pourquoi ne pas l'utiliser? Si l'application est gigantesque et que vous essayez de faire de très petites optimisations pour qui vous construisez cette application, cela ne vous dérangerait probablement pas le coût supplémentaire associé à l'achat d'une licence en échange des améliorations apportées à leur logiciel. Parlez-vous de la visionneuse d'événements de Windows ou des abonnements aux événements de vos classes?

+0

La taille de la solution (8 Mo * .cs fichiers) rend cette approche avec un argument d'événement personnalisé trop fastidieux. – ToPa

+0

Si vous utilisez un IDE, vous pouvez facilement le remplacer après avoir créé un customevent. Cela ne devrait pas prendre plus de 10 ou 15 minutes. Et si vous utilisez déjà customevents tout ce que vous devez faire est d'ajouter un nouveau champ privé pour faire le comptage. – Mark

+0

Aussi comment dans le monde sont vos fichiers texte * .cs ASCII 8MB ?! Si tel est le cas, vous avez besoin d'un refactoring GRAVE de votre programme. – Mark

0

Si c'est ce dernier, qui s'abonne à vos événements? Peut-être que vous pouvez écrire du code «colle» entre les événements et les abonnés qui comptent!

1

Je ne suis pas sûr que connaître le nombre d'événements vous aiderait de quelque façon que ce soit. Il serait plus utile de savoir où votre programme passe son temps, ou d'allouer sa mémoire. Un profileur aidera avec cela.


Pour mémoire, une liste des profileurs:

+0

L'application utilise le modèle de commande où de nombreuses commandes (~ 80) configurent les listes d'événements au démarrage. La taille de la solution entraîne la saisie d'un grand nombre d'événements et leur déclenchement lorsque cela n'est pas nécessaire. J'essaie une solution instanciant les commandes quand elles sont nécessaires pour la première fois. C'est pour mesurer l'effet de cela que j'ai posé ma question. (Le code source * .cs de la solution est d'environ 8 Mo) – ToPa

0

Je suis venu à la conclusion d'essayer des outils performance measuremet à la place. Comme il n'y a pas de moyen facile de faire ce code de mesure. Je vais me tromper pour voir ce qu'il peut faire pour moi.

Questions connexes