59 votes

Comment mesurer la durée d'exécution d'une fonction ?

Je souhaite connaître la durée d'exécution d'une fonction. J'ai donc ajouté un objet timer à mon formulaire et j'ai obtenu ce code :

private int counter = 0;

// Inside button click I have:
timer = new Timer();
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
Result result = new Result();
result = new GeneticAlgorithms().TabuSearch(parametersTabu, functia);
timer.Stop();

Et.. :

private void timer_Tick(object sender, EventArgs e)
{
    counter++;
    btnTabuSearch.Text = counter.ToString();
}

Mais c'est sans compter. Pourquoi ?

62voto

Fuex Points 6246

Pour éviter de futurs problèmes avec un timer, voici le bon code :

timer = new Timer();
timer.Tick += new EventHandler(timer_Tick);
timer.Interval = 1; //set interval on 1 milliseconds
timer.Enabled = true; //start the timer
Result result = new Result();
result = new GeneticAlgorithms().TabuSearch(parametersTabu, functia);
timer.Enabled = false; //stop the timer

private void timer_Tick(object sender, EventArgs e)
{
   counter++;
   btnTabuSearch.Text = counter.ToString();
}

Mais ce n'est pas la bonne approche. Vous devez utiliser le Chronomètre (System.Diagnostic) car il s'agit d'une classe Minuterie haute résolution et le mot Diagnostic dit tout.

Essayez donc ceci :

Stopwatch timer = Stopwatch.StartNew();

Result result = new Result();
result = new GeneticAlgorithms().TabuSearch(parametersTabu, functia);

timer.Stop();  
TimeSpan timespan = timer.Elapsed;

btnTabuSearch.Text = String.Format("{0:00}:{1:00}:{2:00}", timespan.Minutes, timespan.Seconds, timespan.Milliseconds / 10);

56voto

Oded Points 271275

N'utilisez pas de minuterie - utilisez la fonction Stopwatch classe.

var sw = new Stopwatch();
Result result = new Result();

sw.Start();
result = new GeneticAlgorithms().TabuSearch(parametersTabu, functia);

sw.Stop();

// sw.Elapsed tells you how much time passed

15voto

batmaci Points 411

Visual Studio 2015 L'outil de diagnostic est disponible pour les versions 2017 Professional et Enterprise. Si vous avez un point d'arrêt à la fin de votre fonction, il affichera le temps et la durée sous l'icône Evénements comme le montre l'image :

Enter image description here

Vous pouvez consulter l'article Fenêtre du débogueur des outils de diagnostic dans Visual Studio 2015 pour plus de détails.

PS : Jusqu'à présent, seuls les formulaires Xamarin, projet multiplateforme, ne prennent pas en charge cette fonctionnalité. Je souhaite que Microsoft mette en place cette fonctionnalité pour les projets xamarin forms également.

15voto

Alain Points 10079

La meilleure façon de voir combien de temps prend l'exécution d'un bout de code est d'utiliser la fonction System.Diagnostics.Stopwatch .

Voici un exemple :

using System.Diagnostics;

#if DEBUG
     Stopwatch timer = new Stopwatch();
     timer.Start();
#endif

     //Long running code

#if DEBUG
     timer.Stop();
     Debug.WriteLine("Time Taken: " + timer.Elapsed.TotalMilliseconds.ToString("#,##0.00 'milliseconds'"));
#endif

J'utilise le #if DEBUG pour s'assurer que le code du chronomètre ne se retrouve pas dans la version de production, mais vous pouvez vous en passer.

11voto

james lewis Points 1176

Vous devez utiliser la classe chronomètre pour les fonctions de chronométrage.

Essayez ce qui suit :

private int counter = 0;

// setup stopwatch and begin timing
var timer = System.Diagnostics.Stopwatch.StartNew();

Result result = new Result();
result = new GeneticAlgorithms().TabuSearch(parametersTabu, functia);

// stop timer and get elapsed time
timer.Stop();
var elapsed = timer.Elapsed;

// display result time
MessageBox.Show(elapsed.ToString("mm':'ss':'fff"));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X