Preview only show first 10 pages with watermark. For full document please download

Visual Foxpro - Analisando O Desempenho Do Código Fonte

Otimizando processos de criaçao de aplicativos em VFP.

   EMBED


Share

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