Calculer le temps d'exécution d'une méthode

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

J'ai une méthode de prise de temps d'E/S qui copie les données d'un emplacement à un autre. Quelle est la meilleure et la plus réelle façon de calculer le temps d'exécution? Thread? Timer? Stopwatch? Toute autre solution? Je veux le plus exact, et le plus bref possible.

390
demandé sur Community 2012-12-24 13:30:51

5 réponses

Stopwatch est conçu à cet effet et est l'un des meilleurs moyens de mesurer l'exécution du temps dans .NET.

var watch = System.Diagnostics.Stopwatch.StartNew();
// the code that you want to measure comes here
watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;

Ne pas utiliser DateTime pour mesurer l'exécution du temps dans. NET.


Mise à jour:

Comme indiqué par @series0ne dans la section Commentaires: Si vous voulez une mesure précise de l'exécution d'un code, vous devrez utiliser les compteurs de performance intégrés au système d'exploitation. La réponse suivante contient une belle aperçu.

777
répondu Darin Dimitrov 2017-12-09 12:27:28

Par expérience personnelle, la classe System.Diagnostics.Stopwatch peut être utilisée pour mesurer le temps d'exécution d'une méthode, cependant, attention : Ce n'est pas tout à fait exact!

Considérons l'exemple suivant:

Stopwatch sw;

for(int index = 0; index < 10; index++)
{
    sw = Stopwatch.StartNew();
    DoSomething();
    Console.WriteLine(sw.ElapsedMilliseconds);
}

sw.Stop();

Exemple de résultats

132ms
4ms
3ms
3ms
2ms
3ms
34ms
2ms
1ms
1ms

Maintenant, vous vous demandez; " Eh bien, pourquoi at-il fallu 132 ms la première fois, et beaucoup moins le reste du temps?"

La réponse est que Stopwatch ne compense pas l'activité "bruit de fond" dans. NET, comme JITing. Par conséquent, la première fois que vous exécutez votre méthode,. net JIT est le premier. Le temps qu'il faut pour le faire est ajouté à l'Heure de l'exécution. De même, d'autres facteurs feront également varier le temps d'exécution.

Ce que vous devriez vraiment rechercher pour une précision absolue est Performance Profiling!

Jetez un oeil à ce qui suit:

Redgate ANTS Performance Profiler est un produit commercial, mais produit des résultats très précis. - Boostez le performances de vos applications avec. net profiling

Voici un article de StackOverflow sur le profilage: - Quels sont les bons profileurs. net?

J'ai également écrit un article sur le profilage des performances en utilisant le chronomètre que vous voudrez peut-être regarder- profilage des performances dans. net

55
répondu series0ne 2018-10-06 00:12:46

StopWatch classe ressemble pour votre meilleure solution.

Stopwatch sw = Stopwatch.StartNew();
DoSomeWork();
sw.Stop();

Console.WriteLine("Time taken: {0}ms", sw.Elapsed.TotalMilliseconds);

En outre, il a un champ statique appelé Stopwatch.IsHighResolution. Bien sûr, il s'agit d'un problème matériel et de système d'exploitation.

Indique si la minuterie est basée sur une performance haute résolution compteur.

22
répondu Soner Gönül 2012-12-24 09:43:34

Si vous êtes intéressé par la compréhension des performances, la meilleure réponse est d'utiliser un profileur.

Sinon Système.Diagnostic.Chronomètre fournit une minuterie haute résolution.

17
répondu Jeff Foster 2012-12-24 09:32:49

Le chronomètre utilisera le compteur haute résolution

Le chronomètre mesure le temps écoulé En comptant les mécanisme de minuterie sous-jacent. Si le matériel installé et d'exploitation Système Soutien une haute-résolution performance compteur, puis le La classe chronomètre utilise ce compteur pour mesurer le temps écoulé. Autrement, la classe Chronomètre utilise la minuterie système pour mesurer le temps écoulé. Utiliser les champs fréquence et IsHighResolution pour déterminer précision et la résolution de la mise en œuvre de chronomètre timing.

Si vous mesurez IO alors vos chiffres seront probablement impactés par des événements externes, et je m'inquiéterais tellement re. exactitude (comme vous l'avez indiqué ci-dessus). Au lieu de cela, je prendrais une gamme de mesures et considérerais la moyenne et la distribution de ces chiffres.

7
répondu Brian Agnew 2012-12-24 09:33:44