Ler em inglês

Partilhar via


Stopwatch Classe

Definição

Fornece um conjunto de métodos e propriedades que você pode usar para medir com precisão o tempo decorrido.

C#
public class Stopwatch
Herança
Stopwatch

Exemplos

O exemplo a seguir demonstra como usar a Stopwatch classe para determinar o tempo de execução de um aplicativo.

C#
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);
    }
}

O exemplo a seguir demonstra o uso da classe para calcular dados de Stopwatch desempenho.

C#
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);
            }
        }
     }
}

Comentários

Uma Stopwatch instância pode medir o tempo decorrido para um intervalo ou o total de tempo decorrido em vários intervalos. Em um cenário típicoStopwatch, você chama o Start método e, eventualmente, chama o Stop método e marcar tempo decorrido usando a Elapsed propriedade .

Uma Stopwatch instância está em execução ou interrompida; use IsRunning para determinar o estado atual de um Stopwatch. Use Start para começar a medir o tempo decorrido; use Stop para parar de medir o tempo decorrido. Consulte o valor de tempo decorrido por meio das propriedades Elapsed, ElapsedMillisecondsou ElapsedTicks. Você pode consultar as propriedades de tempo decorrido enquanto a instância está em execução ou interrompida. As propriedades de tempo decorrido aumentam constantemente enquanto o Stopwatch está em execução; elas permanecem constantes quando a instância é interrompida.

Por padrão, o valor de tempo decorrido de uma Stopwatch instância é igual ao total de todos os intervalos de tempo medidos. Cada chamada para começa a Start contar no tempo decorrido cumulativo; cada chamada para Stop termina a medida de intervalo atual e congela o valor de tempo decorrido cumulativo. Use o Reset método para limpar o tempo decorrido cumulativo em uma instância existente Stopwatch .

O Stopwatch tempo decorrido mede a contagem de tiques de temporizador no mecanismo de temporizador subjacente. Se o hardware instalado e o sistema operacional derem suporte a um contador de desempenho de alta resolução, a Stopwatch classe usará esse contador para medir o tempo decorrido. Caso contrário, a Stopwatch classe usa o temporizador do sistema para medir o tempo decorrido. Use os Frequency campos e IsHighResolution para determinar a precisão e a resolução da implementação de Stopwatch tempo.

A Stopwatch classe auxilia na manipulação de contadores de desempenho relacionados ao tempo dentro do código gerenciado. Especificamente, o campo e GetTimestamp o Frequency método podem ser usados no lugar das APIs QueryPerformanceFrequency não gerenciadas do Windows e QueryPerformanceCounter.

Nota

Em um computador multiprocessador, não importa em qual processador o thread é executado. No entanto, devido a bugs no BIOS ou na HAL (Camada de Abstração de Hardware), você pode obter resultados de tempo diferentes em processadores diferentes. Para especificar a afinidade do processador para um thread, use o ProcessThread.ProcessorAffinity método .

Construtores

Stopwatch()

Inicializa uma nova instância da classe Stopwatch.

Campos

Frequency

Obtém a frequência do temporizador como o número de tiques por segundo. Este campo é somente leitura.

IsHighResolution

Indica se o temporizador é baseado em um contador de desempenho de alta resolução. Este campo é somente leitura.

Propriedades

Elapsed

Obtém o tempo total decorrido, medido pela instância atual.

ElapsedMilliseconds

Obtém o tempo total decorrido, medido pela instância atual, em milissegundos.

ElapsedTicks

Obtém o tempo total decorrido, medido pela instância atual, em tiques do temporizador.

IsRunning

Obtém um valor que indica se o temporizador de Stopwatch está em execução.

Métodos

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetElapsedTime(Int64)

Obtém o tempo decorrido desde o startingTimestamp valor recuperado usando GetTimestamp().

GetElapsedTime(Int64, Int64)

Obtém o tempo decorrido entre dois carimbos de data/hora recuperados usando GetTimestamp().

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetTimestamp()

Obtém o número de tiques atual no mecanismo de temporizador.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
Reset()

Interrompe a medida de intervalo de tempo e redefine o tempo decorrido para zero.

Restart()

Interrompe a medida de tempo de intervalo, redefine o tempo decorrido para zero e começa a medir o tempo decorrido.

Start()

Inicia ou retoma a medição do tempo decorrido de um intervalo.

StartNew()

Inicializa uma nova instância Stopwatch, define a propriedade de tempo decorrido como zero e começa a medir o tempo decorrido.

Stop()

Para a medição do tempo decorrido de um intervalo.

ToString()

Retorna o Elapsed tempo como uma cadeia de caracteres.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Confira também