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


 


 


 

3 comentarios sobre “Una lucha desigual ‘Try vs TryParse’”

  1. 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

Responder a anonymous Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *