ID do artigo: 306979 - Última revisão: quarta-feira, 9 de abril de 2003 - Revisão: 1.0

PROCEDIMENTOS: Usar QueryPerformanceCounter para temporizar o código no Visual C# .NET

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Este artigo foi publicado anteriormente em BR306979

Nesta página

Expandir tudo | Recolher tudo

Sumário

Ao testar o código para identificar afunilamentos de desempenho, você precisará usar o timer de resolução mais alta oferecido pelo sistema. Este artigo passo a passo descreve como usar a função QueryPerformanceCounter para temporizar o código do aplicativo.

OBSERVAÇÃO: JScript .NET não pode chamar as funções API do Microsoft Windows.

Criar e executar um aplicativo de demonstração

  1. Inicie o Visual Studio .NET e crie um novo aplicativo de console do Visual C#.
  2. Substitua o código padrão pelo seguinte código, que temporiza as operações em incrementos de 100:
    using System;
    using System.Runtime.InteropServices;
    
    namespace csConPerfCounter
    {
    	class Class1
    	{
    		[DllImport("kernel32.dll")]
    		extern static short QueryPerformanceCounter(ref long x);
    		[DllImport("kernel32.dll")]
    		extern static short QueryPerformanceFrequency(ref long x);
    
    		static void Main(string[] args)
    		{
    			long ctr1 = 0, ctr2 = 0, freq = 0;
    			int acc = 0, i = 0;
    			if (QueryPerformanceCounter(ref ctr1)!=0)	// Begin timing.
    			{
    				for (i=0; i<100; i++) acc++;		// Code being timed.
    				QueryPerformanceCounter(ref ctr2);	// Finish timing.
    				Console.WriteLine("Start Value: " + ctr1);
    				Console.WriteLine("End Value: " + ctr2);
    				QueryPerformanceFrequency(ref freq);
    				Console.WriteLine("QueryPerformanceCounter minimum resolution: 1/" + freq + " seconds.");
    				Console.WriteLine("100 Increment time: " + (ctr2 - ctr1) * 1.0 / freq + " seconds.");
    			}
    			else
    			   Console.WriteLine("High-resolution counter not supported.");
    
    			// Make the console window wait.
    
    			Console.WriteLine();
    			Console.Write("Press Enter to finish ... ");
    			Console.Read();
    		}
    	}
    }
  3. Salve o aplicativo e pressione a tecla F5 para compilar e executar o aplicativo. As janelas de console devem exibir uma saída similar à seguinte:
    Start Value: 281060816204
    End Value: 281060816269
    QueryPerformanceCounter minimum resolution: 1/3579545 seconds.
    100 Increment time: 1.81587324646009E-05 seconds.
    
    Press Enter to finish ...
  4. Pressione ENTER para interromper a execução do aplicativo e fechar a janela do console.

Solução de problemas

  • Esta chamada API pode apresentar falhas em algumas circunstâncias. Verifique o valor de retorno e ajuste o código para certificar-se de que você recebeu resultados válidos.
  • Para obter melhores resultados, teste o aplicativo várias vezes quando nenhum outro processo de aplicativo ou servidor estiver em execução. As atividades em outros segmentos e processos podem afetar o percentual de tempo que o sistema despenderá no aplicativo de destino.

REFERÊNCIAS

Para obter mais informações, procure por "QueryPerformanceCounter" e "QueryPerformanceFrequency" na Ajuda on-line.

Para obter mais informações sobre outros timers, procure por "timeGetTime", "GetTickCount" e "System.DateTime class" na Ajuda on-line.
















A informação contida neste artigo aplica-se a:
  • Microsoft Visual C# .NET 2002 Standard Edition
Palavras-chave: 
kbhowto kbhowtomaster KB306979