2010-01-06 5 views
5

Je voudrais être en mesure de calculer la durée d'exécution d'un certain nombre de fonctions. Je pensais utiliser un type de classe chronomètre. Je peux appeler start/stop avant et après chaque appel de fonction, mais cela me semble horriblement moche. Y at-il un moyen de le faire sans un cours de chronomètre? Quelque chose dans la classe Reflections peut-il aider à cela?C# 2.0 Minuterie d'exécution

Merci d'avance pour votre contribution.

+2

Quel est le problème avec la classe Stopwatch (System.Diagnostics.Stopwatch)? –

+0

Il n'y a rien de mal avec cela. Si c'est le meilleur moyen, alors je vais bien. Je cherchais simplement quelque chose d'un peu plus dynamique et je voulais éviter d'encombrer mon code de départ/arrêt. –

+0

@Martinho: J.Hendrix veut profiler chaque appel de fonction unique. C'est faisable avec Stopwatch mais ce n'est probablement pas la meilleure solution pour le profilage à l'échelle de la solution. Notez que les réponses ci-dessous suggèrent des profileurs externes. –

Répondre

3

Je pense que u doit essayer la façon PostSharp http://www.postsharp.org/

Modification du code dans l'échantillon pour celui-ci:

public class ProfileMethodsAttribute : OnMethodBoundaryAspect 
{ 
    public override void OnEntry(MethodExecutionEventArgs eventArgs) 
    { eventArgs.MethodExecutionTag = Stopwatch.StartNew(); } 

    public override void OnExit(MethodExecutionEventArgs eventArgs) 
    { 
    // Here u can get the time 
    Console.WriteLine(((Stopwatch)eventArgs.MethodExecutionTag).ElapsedMilliseconds); 
    } 
} 

Vous pouvez obtenir le temps de toute méthode

+0

+1 Cela semble bon jusqu'à présent. –

2

Je recommande le commanditaire de l'étiquette de performance ... Red Gate Ants. Vous pouvez obtenir une démo qui exécutera votre application et vous fournir des informations sur les performances pour chaque ligne et chaque méthode que votre application rencontre pendant son profilage.

0

Il existe plusieurs temporisateurs. System.Timers.Timer serait un tel. Mais comme le suggère la réponse précédente, êtes-vous sûr que c'est la bonne solution au problème que vous tentez de résoudre?

+0

Non, je ne suis pas sûr. J'ai quelques idées, mais très ouvert aux suggestions. Merci! –

1

Je pense que vous devriez penser à utiliser le profilage de code ... Utilisez une application externe comme Ants Profiler pour profiler votre code? Ants vient de Red Gate et n'est pas gratuit mais je pense qu'il y a aussi des applications libres/open source.

Certains free/open source profilers here ...

Il est autorisé à chronomètre une méthode ici et là, mais en essayant de le faire pour chaque méthode dans votre solution rapidement devenir difficile à manier.

+0

Je vais jeter un coup d'oeil aux fourmis. Ma pensée était de pouvoir l'allumer et l'éteindre en utilisant une sorte de drapeau. Je veux être en mesure de l'exécuter dans un environnement de production pour aider à résoudre les problèmes réseau, SQL, ou d'autres goulots d'étranglement IO. –

1

Vous pouvez mettre la classe chronomètre dans un attribut utilisé pour décorer vos méthodes, c'est-à-dire le style AOP. consultez this

+0

+1 Bien! Je pense que c'est ce que je cherche. Je n'ai jamais décoré une méthode auparavant. Est-ce que cela fonctionnera en 2.0? Dois-je ajouter des références au projet? –

Questions connexes