Transcript
iMasters - Por uma Internet mais criativa e dinâmica
Página 1
Fabiano Costa Segunda-feira, 08 de maio de 2006
Analisando o desempenho do código fonte O projeto está pronto, o cliente já aprovou e agora é só colocá-lo em produção. Caso encerrado. O problema surge apenas dois meses depois. O cliente reclama que o sistema estava rápido e agora leva uma ou duas horas para processar, e pede, com a calma característica de todos os clientes, que o sistema volte a ter o desempenho da época da implantação. Serão índices do banco? Selects mal projetados? Rotinas do sistema que quando colocadas em grandes processamentos se afogam em seu próprio código? Como sabemos, 50% da solução de qualquer problema consiste em entendê-lo, e para o programador de Visual Fox Pro entender o que acontece com o seu código, tem à sua disposição uma excelente ferramenta, mas normalmente deixada de lado: Coverage Profiler. Diferente do debug que pode se encontrado em qualquer linguagem, o Coverage Profiler pode mapear o tempo de execução não só de uma rotina, mas de um loop e até de um único comando ou função permitindo que o programador defina mudanças no código fonte baseado no desempenho do processo e não apenas em seu feeling. Vamos tomar o exemplo abaixo: Programa 01 m.lnArq=FOPEN("c:\work\livro1.txt") m.lcTexto="" m.lnMEU=0 DO WHILE !FEOF(m.lnArq) m.lcLetra=FREAD(m.lnArq,1) IF ASC(m.lcLetra)=32 AND UPPER(m.lcTexto)="MEU" m.lnMeu = m.lnMeu + 1 m.lcTexto="" ENDIF IF ASC(m.lcLetra)=32 m.lcTexto="" else m.lcTexto = m.lcTexto + m.lcLetra ENDIF ENDDO =FCLOSE(m.lnArq) ? "Total de palavras MEU no arquivo:",m.lnMeu Este programa lê um livro de 125k e procura quantas ocorrências a palavra MEU existem no texto. Rápido e funcional, mas quando rodamos este mesmo programa em um livro de 780k a demora pode ser observada e em livros maiores que 2MB pode sair para tomar um café! Realmente o código acima não é dos melhores, mas vamos melhorá-lo com a ajuda do Coverage Profiler. Para isso basta informar no início e no fim da rotina as marcas do coverage profiler: Programa 02 Set coverage to c:\work\processo m.lnArq=FOPEN("c:\work\livro1.txt") m.lcTexto="" m.lnMEU=0 DO WHILE !FEOF(m.lnArq) m.lcLetra=FREAD(m.lnArq,1) IF ASC(m.lcLetra)=32 AND UPPER(m.lcTexto)="MEU" m.lnMeu = m.lnMeu + 1 m.lcTexto="" ENDIF IF ASC(m.lcLetra)=32 m.lcTexto="" else m.lcTexto = m.lcTexto + m.lcLetra ENDIF ENDDO =FCLOSE(m.lnArq) ? "Total de palavras MEU no arquivo:",m.lnMeu Set coverage to Agora instruímos o Visual Fox Pro a processar a rotina e criar o arquivo “c:\work\processo.log” com todas as estatísticas de processamento para análise.
http://imasters.uol.com.br/artigo/4029/visual_foxpro/analisando_o_desempenho_do_codigo_fonte/imprimir/
9/28/2010 11:49:11 AM
iMasters - Por uma Internet mais criativa e dinâmica
Página 2
Após execução, podemos verificar todos os detalhes do processo escolhendo no Menu TOOLS a opção Coverage Profile:
Escolha o arquivo de LOG gerado, e será processado e apresentado os resultados do processamento da rotina:
Agora, o código fonte está documentado por desempenho e podemos ver que o comando FREAD processou 128.366 vezes! A primeira vez que foi processado levou 0.000068 segundos e sua média de processo foi de 0.000019 segundos, ou seja, apenas este comando levou aproximadamente 2.43 segundos no total. Sabendo que o FREAD / DO WHILE é o nosso gargalo vamos mudar o código: Programa 03 SET COVERAGE TO c:\work\processo ? "Total de palavras MEU no arquivo:",; OCCURS(" MEU ",UPPER(FILETOSTR("c:\work\livro1.txt"))) SET COVERAGE TO O que temos agora:
Agora, sabemos que a rotina leva 0.005509 segundos para executar um arquivo de 128k, e se executarmos um arquivo de 2.3Mb?
http://imasters.uol.com.br/artigo/4029/visual_foxpro/analisando_o_desempenho_do_codigo_fonte/imprimir/
9/28/2010 11:49:11 AM
iMasters - Por uma Internet mais criativa e dinâmica
Página 3
Embora o livro tenha ficado muitas vezes maior, o processamento não aumentou exponencialmente, mostrando que esta é a melhor rotina que poderíamos ter. Use o Coverage Profiler para auditoria de desempenho do código, principalmente no seu dia-a-dia e faça o Visual Fox Pro e seus sistemas decolarem.
http://imasters.uol.com.br/artigo/4029/visual_foxpro/analisando_o_desempenho_do_codigo_fonte/imprimir/
9/28/2010 11:49:11 AM