Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. |
Traduction
Source
|
Stopwatch, classe
Fournit un jeu de méthodes et de propriétés que vous pouvez utiliser pour mesurer le temps écoulé précisément.
Assembly : System (dans System.dll)
Le type Stopwatch expose les membres suivants.
| Nom | Description | |
|---|---|---|
|
Elapsed | Obtient le temps total écoulé mesuré par l'instance actuelle. |
|
ElapsedMilliseconds | Obtient le temps total écoulé mesuré par l'instance actuelle, en millisecondes. |
|
ElapsedTicks | Obtient le temps total écoulé mesuré par l'instance actuelle, en graduations de minuterie. |
|
IsRunning | Obtient une valeur indiquant si la minuterie Stopwatch s'exécute. |
| Nom | Description | |
|---|---|---|
|
Equals(Object) | Détermine si l'Object spécifié est égal à l'Object en cours. (Hérité de Object.) |
|
Finalize | Autorise un objet à tenter de libérer des ressources et d'exécuter d'autres opérations de netto***ge avant qu'il ne soit récupéré par l'opération garbage collection. (Hérité de Object.) |
|
GetHashCode | Sert de fonction de hachage pour un type particulier. (Hérité de Object.) |
|
GetTimestamp | Obtient le nombre actuel de graduations dans le mécanisme de minuterie (Timer). |
|
GetType | Obtient le Type de l'instance actuelle. (Hérité de Object.) |
|
MemberwiseClone | Crée une copie superficielle de l'objet Object actif. (Hérité de Object.) |
|
Reset | Arrête la mesure d'intervalle de temps et remet le temps écoulé à zéro. |
|
Restart | Arrête la mesure d'intervalle de temps, réinitialise le temps écoulé sur zéro puis commence à le mesurer. |
|
Start | Démarre ou reprend la mesure du temps écoulé pour un intervalle. |
|
StartNew | Initialise une nouvelle instance de Stopwatch, affecte une valeur de zéro à la propriété de temps écoulé et commence à mesurer le temps écoulé. |
|
Stop | Cesse de mesurer le temps écoulé pour un intervalle. |
|
ToString | Retourne une chaîne qui représente l'objet actuel. (Hérité de Object.) |
| Nom | Description | |
|---|---|---|
|
Frequency | Obtient la fréquence de la minuterie en nombre de graduations par seconde. Ce champ est en lecture seule. |
|
IsHighResolution | Indique si la minuterie est basée sur un compteur de performance haute résolution. Ce champ est en lecture seule. |
Une instance de Stopwatch peut mesurer le temps écoulé pour un intervalle ou le total du temps écoulé sur plusieurs intervalles. Dans un scénario Stopwatch typique, vous appelez la méthode Start, puis la méthode Stop, et, enfin, vous vérifiez le temps écoulé à l'aide de la propriété Elapsed.
Une instance de Stopwatch s'exécute ou est arrêtée. Utilisez IsRunning pour déterminer l'état actuel de Stopwatch. Utilisez Start pour commencer à mesurer le temps écoulé ; utilisez Stop pour arrêter de mesurer le temps écoulé. Demandez la valeur de temps écoulé par l'intermédiaire des propriétés Elapsed, ElapsedMilliseconds ou ElapsedTicks. Vous pouvez interroger les propriétés de temps écoulé pendant que l'instance s'exécute ou est arrêtée. Les propriétés de temps écoulé augmentent régulièrement pendant que le Stopwatch s'exécute ; ils restent constants lorsque l'instance s'arrête.
Par défaut, la valeur de temps écoulé d'une instance de Stopwatch équivaut au total de tous les intervalles de temps mesurés. Chaque appel à Start commence à compter au temps total passé ; chaque appel de Stop termine la mesure d'intervalle en cours et gèle la valeur du temps total passé. Utilisez la méthode Reset pour effacer le temps total passé dans une instance de Stopwatch existante.
Stopwatch mesure le temps écoulé en comptant les graduations de la minuterie dans le mécanisme de minuterie sous-jacent. Si le matériel et le système d'exploitation installés prennent en charge un compteur de performance haute résolution, la classe Stopwatch utilise ce compteur pour mesurer le temps écoulé. Sinon, la classe Stopwatch utilise l'horloge système pour mesurer le temps écoulé. Utilisez les champs Frequency et IsHighResolution pour déterminer la précision et la résolution de l'implémentation du minutage Stopwatch.
La classe Stopwatch aide à la manipulation des compteurs connexes à la performance de minutage dans le code managé. Plus particulièrement, le champ Frequency et la méthode GetTimestamp peuvent être utilisés au lieu des API Win32 QueryPerformanceFrequency et QueryPerformanceCounter non managées.
Remarque
|
|---|
|
Sur un ordinateur multiprocesseur, peu importe le processeur sur lequel le thread s'exécute. Toutefois, vous pouvez obtenir des résultats de minutage différents sur différents processeurs à cause des bogues du BIOS ou de la Couche d'abstraction matérielle (HAL). Pour spécifier l'affinité de processeur pour un thread, utilisez la méthode ProcessThread.ProcessorAffinity. |
L'exemple suivant montre comment utiliser la classe Stopwatch pour déterminer la durée d'exécution pour une application.
using System; using System.Diagnostics; using System.Threading; class Program { static void Main(string[] args) { Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); Thread.Sleep(10000); stopWatch.Stop(); // Get the elapsed time as a TimeSpan value. TimeSpan ts = stopWatch.Elapsed; // Format and display the TimeSpan value. string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10); Console.WriteLine("RunTime " + elapsedTime); } }
L'exemple suivant montre l'utilisation de la classe Stopwatch pour calculer des données de performance.
using System; using System.Diagnostics; namespace StopWatchSample { class OperationsTimer { public static void Main() { DisplayTimerProperties(); Console.WriteLine(); Console.WriteLine("Press the Enter key to begin:"); Console.ReadLine(); Console.WriteLine(); TimeOperations(); } public static void DisplayTimerProperties() { // Display the timer frequency and resolution. if (Stopwatch.IsHighResolution) { Console.WriteLine("Operations timed using the system's high-resolution performance counter."); } else { Console.WriteLine("Operations timed using the DateTime class."); } long frequency = Stopwatch.Frequency; Console.WriteLine(" Timer frequency in ticks per second = {0}", frequency); long nanosecPerTick = (1000L*1000L*1000L) / frequency; Console.WriteLine(" Timer is accurate within {0} nanoseconds", nanosecPerTick); } private static void TimeOperations() { long nanosecPerTick = (1000L*1000L*1000L) / Stopwatch.Frequency; const long numIterations = 10000; // Define the operation title names. String [] operationNames = {"Operation: Int32.Parse(\"0\")", "Operation: Int32.TryParse(\"0\")", "Operation: Int32.Parse(\"a\")", "Operation: Int32.TryParse(\"a\")"}; // Time four different implementations for parsing // an integer from a string. for (int operation = 0; operation <= 3; operation++) { // Define variables for operation statistics. long numTicks = 0; long numRollovers = 0; long maxTicks = 0; long minTicks = Int64.MaxValue; int indexFastest = -1; int indexSlowest = -1; long milliSec = 0; Stopwatch time10kOperations = Stopwatch.StartNew(); // Run the current operation 10001 times. // The first execution time will be tossed // out, since it can skew the average time. for (int i=0; i<=numIterations; i++) { long ticksThisTime = 0; int inputNum; Stopwatch timePerParse; switch (operation) { case 0: // Parse a valid integer using // a try-catch statement. // Start a new stopwatch timer. timePerParse = Stopwatch.StartNew(); try { inputNum = Int32.Parse("0"); } catch (FormatException) { inputNum = 0; } // Stop the timer, and save the // elapsed ticks for the operation. timePerParse.Stop(); ticksThisTime = timePerParse.ElapsedTicks; break; case 1: // Parse a valid integer using // the TryParse statement. // Start a new stopwatch timer. timePerParse = Stopwatch.StartNew(); if (!Int32.TryParse("0", out inputNum)) { inputNum = 0; } // Stop the timer, and save the // elapsed ticks for the operation. timePerParse.Stop(); ticksThisTime = timePerParse.ElapsedTicks; break; case 2: // Parse an invalid value using // a try-catch statement. // Start a new stopwatch timer. timePerParse = Stopwatch.StartNew(); try { inputNum = Int32.Parse("a"); } catch (FormatException) { inputNum = 0; } // Stop the timer, and save the // elapsed ticks for the operation. timePerParse.Stop(); ticksThisTime = timePerParse.ElapsedTicks; break; case 3: // Parse an invalid value using // the TryParse statement. // Start a new stopwatch timer. timePerParse = Stopwatch.StartNew(); if (!Int32.TryParse("a", out inputNum)) { inputNum = 0; } // Stop the timer, and save the // elapsed ticks for the operation. timePerParse.Stop(); ticksThisTime = timePerParse.ElapsedTicks; break; default: break; } // Skip over the time for the first operation, // just in case it caused a one-time // performance hit. if (i == 0) { time10kOperations.Reset(); time10kOperations.Start(); } else { // Update operation statistics // for iterations 1-10001. if (maxTicks < ticksThisTime) { indexSlowest = i; maxTicks = ticksThisTime; } if (minTicks > ticksThisTime) { indexFastest = i; minTicks = ticksThisTime; } numTicks += ticksThisTime; if (numTicks < ticksThisTime) { // Keep track of rollovers. numRollovers ++; } } } // Display the statistics for 10000 iterations. time10kOperations.Stop(); milliSec = time10kOperations.ElapsedMilliseconds; Console.WriteLine(); Console.WriteLine("{0} Summary:", operationNames[operation]); Console.WriteLine(" Slowest time: #{0}/{1} = {2} ticks", indexSlowest, numIterations, maxTicks); Console.WriteLine(" Fastest time: #{0}/{1} = {2} ticks", indexFastest, numIterations, minTicks); Console.WriteLine(" Average time: {0} ticks = {1} nanoseconds", numTicks / numIterations, (numTicks * nanosecPerTick) / numIterations ); Console.WriteLine(" Total time looping through {0} operations: {1} milliseconds", numIterations, milliSec); } } } }
Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows XP SP2 Édition x64, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2
Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.
Remarque