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!!!!!!!!!!! ;)
quinta-feira, 29 de novembro de 2007
Performance de programas
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário