Tenía pensado empezar este post con una serie de frases míticas del titán y vecino de blog R.Corral como por ejemplo ‘ Cuando tienes un martillo todo parecen clavos ‘pero después de leer el post sobre el cordinador de transacciones distribuídas me he decidido por hacer algo que tenga que ver más sobre buenas prácticas de desarrollo.
Try vs TryParse
El ‘parseo’ o la conversión de cadenas de texto a formatos numéricos como por ejemplo int o decimal es una tarea relativamente frecuente cuando estamos escribiendo código, la mayoría de estas conversiónes se realiza con un simple bloque Try Catch tal y como se ve a continuación:
try
{
int.Parse(cadenaToParser);
}
catch (FormatException)
{
//Manejar la excepcion
}
En el momento en el que la cadena no se pueda parsear, se lanzará la excepción FormatException, el proceso a seguir una vez lanzada esta seria la comprobación de la existencia de un bloque Try Catch y comprobar si el Stack de excepciones está exhausto o no, si tiene más interés podría ver el proceso de unwind del stack. El caso es que guiar el flujo de un programa mediante la captura de excepciones, a parte de ser una forma mala de diseñar, tiene un rendimiento muy pobre. Como alternativa tenemos los métodos TryParse, pertenecientes a la mayoria de tipos como int,decimal, etc. El método TryParse, en conversiones de cadenas erroneas ofrece un rendimiento enormementa más alto que usar un bloque Try Catch para verificar si la conversión se hace correctamente o no.
Un ejemplo de uso de TryParse puede verse a continuación
int
.TryParse(cadenaToParser, out result);Tenía pensado poner una grafiquilla excel para mostrar las comparativas de rendimiento pero son tan grandes las diferencias que no tendría mucho sentido hacerla, a grandes rasgos podría comentaros que en 10000 iteraciones con conversiones erroneas el proceso de Try Catch tardaría unos 315 segundos con TryParse este proceso se realizaría entre 1 y 2 s 🙂 ¿Asombrados… ?
Si no os lo creeis podeis hacer los pruebas con el código adjunto al post, y como diría nuestro amigo Rodrigo << los test de rendimiento se hacen con ‘release’>>
Uno de los puntos en los que más fallan los desarrolladores noveles es a la hora de trabajar con excepciones….
Con permiso tuyo, quisiera enlazar esta entrada desde mi blog. Que ayer antes de ayer hice una entrada sobre le mismo tema pero desde otro punto de vista.
Gracias por la información
ASP.NET ASP.NET Dynamic Data Preview Available . A ver cuando nos hacemos un tiempito para probarlo.