quinta-feira, 29 de novembro de 2007

Performance de programas

Vou relatar aqui uma experiência minha desenvolvendo softwares...

Nunca imaginei diferença tão gritante de performance...

Desenvolvendo em C#.Net, eu precisava validar uma string como número. Mas em C#, não conheço uma função como a isNumeric, do java....
Então, o que eu fiz...
Fiz um método isNumeric(string str). Dentro dela, eu tentava converter a string para um inteiro de 32 bits (Convert.ToInt32(str)). Caso desse certo, meu método retornava verdadeiro (descartando então a conversão para inteiro). E caso ocorresse alguma exceção qualquer, retornava falso. Uma #@$* gambiarra essa... Estava demorando cerca de 10 minutos para executar a leitura e validação de um arquivo texto relativamente grande...

Hoje, cheguei no trabalho, com uma idéia, de testar usando bytes, e os valores binários de cada caractere da string a validar...
Então, fiz uma classe para fazer estes testes (É um programa bobinho, bem específico.) Na classe, defini as variáveis que representarão os números. Deixando tudo com um escopo não local a blocos de repetição para não perder performance alocando e desalocando memória a todo momento.

Então, para cada caractere da string, eu testava seu valor com todos os 10 possíveis, (0 a 9). Se o caractere não se encaixava nestes valores, retornava falso, pois não era um número válido, a string. E no final, se passasse em todos os testes, retornava verdadeiro. Era um número!

Bobinho isso tudo, não é?

Pois então, na execução do programa, demorou menos do que 1 minuto!!!!!!
1 minuto em relação a 10 minutos! Muita diferença!!!!!!!

Este exemplo é só para encorajar todos a "não usarem gambiarras" em seus programas!!!!!!!!!!! ;)

Nenhum comentário: