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

 

 

 

Published 22/3/2006 16:15 por Unai
Archivado en:
Comparte este post:
http://geeks.ms/blogs/unai/archive/2006/03/22/76.aspx

Comentarios

# Antipatrones en el trabajo con excepciones (I)

Uno de los puntos en los que m&#225;s fallan los desarrolladores noveles es a la hora de trabajar con excepciones....

Friday, May 12, 2006 1:11 PM por La masa, el ladrilo, la bota, el bocadillo...

# re: Una lucha desigual 'Try vs TryParse'

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

Tuesday, April 22, 2008 9:54 AM por Juan Quijano

# LDLS: .NET y mas [2008abr21]

ASP.NET ASP.NET Dynamic Data Preview Available . A ver cuando nos hacemos un tiempito para probarlo.

Tuesday, May 20, 2008 9:17 PM por ASP.NET Espanol Blogs