Stopwatch Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Fournit un ensemble de méthodes et de propriétés que vous pouvez utiliser pour mesurer avec précision le temps écoulé.
public ref class Stopwatch
public class Stopwatch
type Stopwatch = class
Public Class Stopwatch
- Héritage
-
Stopwatch
Exemples
L’exemple suivant montre comment utiliser la Stopwatch classe pour déterminer le temps d’exécution d’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);
}
}
Imports System.Diagnostics
Imports System.Threading
Class Program
Shared Sub Main(ByVal args() As String)
Dim stopWatch As New Stopwatch()
stopWatch.Start()
Thread.Sleep(10000)
stopWatch.Stop()
' Get the elapsed time as a TimeSpan value.
Dim ts As TimeSpan = stopWatch.Elapsed
' Format and display the TimeSpan value.
Dim elapsedTime As String = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10)
Console.WriteLine( "RunTime " + elapsedTime)
End Sub
End Class
L’exemple suivant illustre l’utilisation de la Stopwatch classe pour calculer les données de performances.
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-10000.
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);
}
}
}
}
Imports System.Diagnostics
Class OperationsTimer
Public Shared Sub Main()
DisplayTimerProperties()
Console.WriteLine()
Console.WriteLine("Press the Enter key to begin:")
Console.ReadLine()
Console.WriteLine()
TimeOperations()
End Sub
Public Shared Sub DisplayTimerProperties()
' Display the timer frequency and resolution.
If Stopwatch.IsHighResolution Then
Console.WriteLine("Operations timed using the system's high-resolution performance counter.")
Else
Console.WriteLine("Operations timed using the DateTime class.")
End If
Dim frequency As Long = Stopwatch.Frequency
Console.WriteLine(" Timer frequency in ticks per second = {0}", frequency)
Dim nanosecPerTick As Long = 1000000000 / frequency
Console.WriteLine(" Timer is accurate within {0} nanoseconds", nanosecPerTick)
End Sub
Private Shared Sub TimeOperations()
Dim nanosecPerTick As Long = 1000000000 / Stopwatch.Frequency
Const numIterations As Long = 10000
' Define the operation title names.
Dim operationNames As String() = _
{"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.
Dim operation As Integer
For operation = 0 To 3
' Define variables for operation statistics.
Dim numTicks As Long = 0
Dim numRollovers As Long = 0
Dim maxTicks As Long = 0
Dim minTicks As Long = Int64.MaxValue
Dim indexFastest As Integer = - 1
Dim indexSlowest As Integer = - 1
Dim milliSec As Long = 0
Dim time10kOperations As Stopwatch = Stopwatch.StartNew()
' Run the current operation 10001 times.
' The first execution time will be tossed
' out, since it can skew the average time.
Dim i As Integer
For i = 0 To numIterations
Dim ticksThisTime As Long = 0
Dim inputNum As Integer
Dim timePerParse As Stopwatch
Select Case 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 e As FormatException
inputNum = 0
End Try
' Stop the timer, and save the
' elapsed ticks for the operation.
timePerParse.Stop()
ticksThisTime = timePerParse.ElapsedTicks
Case 1
' Parse a valid integer using
' the TryParse statement.
' Start a new stopwatch timer.
timePerParse = Stopwatch.StartNew()
If Not Int32.TryParse("0", inputNum) Then
inputNum = 0
End If
' Stop the timer, and save the
' elapsed ticks for the operation.
timePerParse.Stop()
ticksThisTime = timePerParse.ElapsedTicks
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 e As FormatException
inputNum = 0
End Try
' Stop the timer, and save the
' elapsed ticks for the operation.
timePerParse.Stop()
ticksThisTime = timePerParse.ElapsedTicks
Case 3
' Parse an invalid value using
' the TryParse statement.
' Start a new stopwatch timer.
timePerParse = Stopwatch.StartNew()
If Not Int32.TryParse("a", inputNum) Then
inputNum = 0
End If
' Stop the timer, and save the
' elapsed ticks for the operation.
timePerParse.Stop()
ticksThisTime = timePerParse.ElapsedTicks
Case Else
End Select
' Skip over the time for the first operation,
' just in case it caused a one-time
' performance hit.
If i = 0 Then
time10kOperations.Reset()
time10kOperations.Start()
Else
' Update operation statistics
' for iterations 1-10001.
If maxTicks < ticksThisTime Then
indexSlowest = i
maxTicks = ticksThisTime
End If
If minTicks > ticksThisTime Then
indexFastest = i
minTicks = ticksThisTime
End If
numTicks += ticksThisTime
If numTicks < ticksThisTime Then
' Keep track of rollovers.
numRollovers += 1
End If
End If
Next i
' 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)
Next operation
End Sub
End Class
Remarques
Une Stopwatch instance peut mesurer le temps écoulé pendant un intervalle, ou le total du temps écoulé entre plusieurs intervalles. Dans un scénario classique Stopwatch , vous appelez la Start méthode, puis appelez la Stop méthode, puis vérifiez le temps écoulé à l’aide de la Elapsed propriété.
Une Stopwatch instance est en cours d’exécution ou arrêtée ; permet IsRunning de déterminer l’état actuel d’un Stopwatch. Permet Start de commencer à mesurer le temps écoulé ; utiliser Stop pour arrêter la mesure du temps écoulé. Interrogez la valeur de temps écoulé par le biais des propriétés Elapsed, ElapsedMillisecondsou ElapsedTicks. Vous pouvez interroger les propriétés de temps écoulé pendant l’exécution ou l’arrêt de l’instance. Les propriétés de temps écoulés augmentent régulièrement pendant l’exécution Stopwatch ; elles restent constantes lorsque l’instance est arrêtée.
Par défaut, la valeur de temps écoulé d’une Stopwatch instance est égale au total de tous les intervalles de temps mesurés. Chaque appel à commencer à Start compter au moment cumulé écoulé ; chaque appel pour mettre fin à Stop la mesure de l’intervalle actuel et fige la valeur de temps écoulé cumulée. Utilisez la Reset méthode pour effacer le temps cumulé écoulé dans une instance existante Stopwatch .
Les Stopwatch mesures se sont écoulées en comptant les cycles du minuteur dans le mécanisme du minuteur sous-jacent. Si le matériel installé et le système d’exploitation prennent en charge un compteur de performances haute résolution, la Stopwatch classe utilise ce compteur pour mesurer le temps écoulé. Sinon, la Stopwatch classe utilise le minuteur système pour mesurer le temps écoulé. Utilisez les champs et IsHighResolution les Frequency champs pour déterminer la précision et la résolution de l’implémentation Stopwatch de minutage.
La Stopwatch classe aide à manipuler les compteurs de performances liés au minutage dans le code managé. Plus précisément, le champ et la Frequency méthode peuvent être utilisés à la place des API QueryPerformanceFrequency Windows non managées et QueryPerformanceCounter.GetTimestamp
Note
Sur un ordinateur multiprocesseur, il n’est pas important que le processeur sur lequel le thread s’exécute. Toutefois, en raison de bogues dans le BIOS ou la couche d’abstraction matérielle (HAL), vous pouvez obtenir des résultats de minutage différents sur différents processeurs. Pour spécifier l’affinité du processeur pour un thread, utilisez la ProcessThread.ProcessorAffinity méthode.
Constructeurs
| Nom | Description |
|---|---|
| Stopwatch() |
Initialise une nouvelle instance de la classe Stopwatch. |
Champs
| Nom | Description |
|---|---|
| Frequency |
Obtient la fréquence du minuteur comme nombre de graduations par seconde. Ce champ est en lecture seule. |
| IsHighResolution |
Indique si le minuteur est basé sur un compteur de performances haute résolution. Ce champ est en lecture seule. |
Propriétés
| Nom | Description |
|---|---|
| Elapsed |
Obtient le temps écoulé total mesuré par l’instance actuelle. |
| ElapsedMilliseconds |
Obtient le temps écoulé total mesuré par l’instance actuelle, en millisecondes. |
| ElapsedTicks |
Obtient le temps écoulé total mesuré par l’instance actuelle, en cycles du minuteur. |
| IsRunning |
Obtient une valeur indiquant si le Stopwatch minuteur est en cours d’exécution. |
Méthodes
| Nom | Description |
|---|---|
| Equals(Object) |
Détermine si l’objet spécifié est égal à l’objet actuel. (Hérité de Object) |
| GetElapsedTime(Int64, Int64) |
Obtient le temps écoulé entre deux horodatages récupérés à l’aide GetTimestamp()de . |
| GetElapsedTime(Int64) |
Obtient le temps écoulé depuis la valeur récupérée à l’aide |
| GetHashCode() |
Sert de fonction de hachage par défaut. (Hérité de Object) |
| GetTimestamp() |
Obtient le nombre actuel de graduations dans le mécanisme du minuteur. |
| GetType() |
Obtient la Type de l’instance actuelle. (Hérité de Object) |
| MemberwiseClone() |
Crée une copie superficielle du Objectactuel. (Hérité de Object) |
| Reset() |
Arrête la mesure de l’intervalle de temps et réinitialise le temps écoulé à zéro. |
| Restart() |
Arrête la mesure de l’intervalle de temps, réinitialise le temps écoulé à zéro et commence à mesurer le temps écoulé. |
| Start() |
Démarre ou reprend, mesure le temps écoulé pendant un intervalle. |
| StartNew() |
Initialise une nouvelle Stopwatch instance, définit la propriété de temps écoulé sur zéro et commence à mesurer le temps écoulé. |
| Stop() |
Arrête la mesure du temps écoulé pendant un intervalle. |
| ToString() |
Retourne l’heure Elapsed sous forme de chaîne. |
| ToString() |
Retourne une chaîne qui représente l’objet actuel. (Hérité de Object) |