IntroducaoDepois de um longo tempo sem postar, nesse topico iremosabordar um pouco sobre como tirar medidas de desempenho de metodos, funcoes eprocedures, as medicoes sao feitas baseadas em milissegundos e unidadesmenores.Desempenho em milissegundosUma forma de medir o desempenho computacional e atraves dotempo de execucao de uma determinada rotina, para o usuario final medidaslevianas como "rapido", "lento" ou "muito rapido"acabam sendo parte usual do dia a dia de utilizacao de um sistema, mas tornar osistema "rapido" exige um pouco trabalho, principalmente quandofalamos de ganhos em milissegundos ou unidades menores (Que serao apresentadasmais tarde).O Delphi nos proporciona uma funcao chamada"GetTickCount", essa funcao retorna um valor em cardinal que e a horaatual em milissegundos, atraves dela e possivel marcar o inicio e fim daexecucao de um codigo, obtendo assim o tempo total despendido para suaexecucao. A ideia e simples: Armazenamos o valor de "GetTickCount"antes da execucao do codigo. Apos a execucao da rotina, tiramos a diferencade "GetTickCount" e do valor armazenado inicialmenteA diferenca entre os valores revela o tempototal em milissegundos que a rotina demorou para ser executada. Na codificacao ficamos com algo similar a isso:var Start:Cardinal;begin Start :=GetTickCount; // Rotina em Questao ShowMessage(IntToStr(GetTickCount - Start) +' milissegundos');end;Desempenhoem microssegundosBom, nateoria a medida de em milissegundos atende bem o uso geral, porem, o problemaacontece em 2 casos: Quando e necessario uma medida mais precisaque milissegundos. Quando o tempo em milissegundos e igual a 0(zero), ou seja, nao e possivel medir aquela rotina ou comando porque o tempodespendido e inferior a 1ms.Nesse caso nossa opcao e utilizar uma medida de desempenho emmicrossegundos, lembrando que milissegundos (10^-3) e microssegundos (10^-6),basicamente 1 segundo possui 1000ms e 1ms possui 1000s.Para extrairmos isso a ideia principal e a mesma domilissegundos, porem ao inves de utilizar a funcao "GetTickCount",utilizamos uma funcao do kernel do Windows (WinApi) chamada"QueryPerformanceCounter", repare que por se tratar de uma funcao apido Windows, ela pode ser utilizada em qualquer linguagem que possua acessadireto as Api's do Windows, eu testei essa funcao em Delphi e C (Declarada emwindows.h), e um amigo me fez o favor de testa-la em C# (Nesse caso e necessarioutilizar um Import de DLL), em java nao sei dizer como ficaria por causa da VM,ja que em teoria o ideal e nao acessar funcoes nativas do SO diretamente, se alguemsouber algo a respeito e se habilitar a comentar sobre, sinta-se a vontade.A funcao "QueryPerformanceCounter", exige umapassagem de parametro, que e basicamente uma variavel do tipo Int64 ou TLargeInteger,apos a execucao o retorno da variavel e a data atual em microssegundos,seguindo o raciocinio inicial basta tirar a diferenca do inicio e fim, queobteremos a execucao do codigo em microssegundos.Na codificacao fica assim:var Start, Stop: Int64;begin QueryPerformanceCounter(Start); // Rotina em questao QueryPerformanceCounter(Stop); ShowMessage(IntToStr(Stop - Start) + 'microssegundos');end;Como a implementacao dessa rotina e um pouco chata, eu criei umaclasse que ajuda bastante nesse caso, pra quem quiser utilizar basta copiar ecolar em uma nova unit.type TMetric = class private class var FStart: Int64; public class procedure Start; class procedure StopAndShow; class function Stop: Int64; end;implementationclass procedureTMetric.Start;begin QueryPerformanceCounter(FStart);end;class procedureTMetric.StopAndShow;var Stop: Int64;begin QueryPerformanceCounter(Stop); ShowMessage(IntToStr(Stop - FStart) + 'microssegundos');end;class function TMetric.Stop:Int64;var Stop: