Para aplicativos de banco de dados de rotina, adicionar um segundo ao tempo de execução de uma tarefa raramente faz diferença para os usuários finais - mas Quando você precisa processar milhões de folhas de árvores ou gerar bilhões de números aleatórios exclusivos, a velocidade de execução se torna mais importante.
Tempo limite do seu código
Em algumas aplicações, métodos de medição de tempo muito precisos e de alta precisão são importantes e felizmente Delphi fornece um contador de alto desempenho para qualificar esses horários.
Usando RTLs Agora Função
Uma opção usa o Agora função. Agora, definido no SysUtils unidade, retorna a data e hora atuais do sistema.
Algumas linhas de código medem o tempo decorrido entre o "início" e a "parada" de algum processo:
A função Now retorna a data e hora atuais do sistema, com precisão de até 10 milissegundos (Windows NT e posterior) ou 55 milissegundos (Windows 98).
Para intervalos muito pequenos, a precisão do "Agora" às vezes não é suficiente.
Usando a API do Windows GetTickCount
Para dados ainda mais precisos, use o GetTickCountAPI do Windows função. GetTickCount recupera o número de milissegundos decorridos desde que o sistema foi iniciado, mas a função possui apenas precisão de 1 ms e nem sempre será precisa se o computador permanecer ligado por longos períodos de Tempo.
O tempo decorrido é armazenado como um valor DWORD (32 bits). Portanto, o tempo será zerado se o Windows for executado continuamente por 49,7 dias.
GetTickCount também é limitado à precisão do timer do sistema (10/55 ms).
Tempo limite de alta precisão
Se o seu PC suportar um contador de desempenho de alta resolução, use o QueryPerformanceFrequency Função da API do Windows para expressar a frequência, em contagens por segundo. O valor da contagem depende do processador.
o QueryPerformanceCounter A função recupera o valor atual do contador de desempenho de alta resolução. Ao chamar essa função no início e no final de uma seção de código, um aplicativo usa o contador como um timer de alta resolução.
A precisão dos temporizadores de alta resolução é de algumas centenas de nanossegundos. Nanossegundo é uma unidade de tempo que representa 0,000000001 segundos - ou 1 bilionésimo de segundo.
TStopWatch: Implementação em Delphi de um contador de alta resolução
Com um aceno para as convenções de nomenclatura .Net, um contador como TStopWatch oferece uma solução Delphi de alta resolução para medições precisas de tempo.
O TStopWatch mede o tempo decorrido contando os tiques do timer no mecanismo subjacente do timer.
- o IsHighResolution A propriedade indica se o cronômetro é baseado em um contador de desempenho de alta resolução.
- o Começar O método começa a medir o tempo decorrido.
- o Pare O método para de medir o tempo decorrido.
- o Milissegundos decorridos A propriedade obtém o tempo total decorrido em milissegundos.
- o Decorrido A propriedade obtém o tempo total decorrido em marcações de timer.
Aqui está um exemplo de uso: