Una lucha desigual ‘Try vs TryParse’

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’>>


 


 


 

El primer post para este nuevo blog de Geeks.ms

Como introducción y primer post para esta nueva comunidad debería empezar por poner algún título chulo como el de nuestro amigo R.Corral, pero no tengo ni tiempo ni imaginación suficiente o sea que va a quedar como está. 🙂


Espero con este blog compartir y recibir comentarios sobre los temas de tecnología que en el se escriban y seguramente sobre vivencias de los ‘Más Viciosos del Pueblo’ que nos vemos y compartimos nuestros pequeños chascarrillos…..


Quiero agradecer además desde aquí a todas las personas que se han acercado a la gira de Microsoft Visual Studio 2005 en Valencia, Bilbao las cuales tuvieron la gran desgracia de soportarme como ponente en desarrollo sobre dispositivos móviles y en las cabañas de seguridad en Windows Mobile 


hasta la próxima….. que será pronto !!


 


 


Este mensaje se proporciona “como está” sin garantías de ninguna clase, y no otorga ningún derecho.