Rendimiento ¿Da igual?

Este artículo tiene por objetivo mostrar de forma simple, algunas herramientas interesantes para realizar una evaluación de las aplicaciones que nos toque desarrollar.

En muchas oportunidades para no decir en todas, escucho la simple frase "Da igual usar esta estructura y además no importa como la invoques no influye…". Yo creo que particularmente estas frases son extremadamente simplistas ya que desde mi punto de vista se influye y mucho en las arquitecturas de las aplicaciones este tipo de decisiones.

Ahora bien, mucho depende del tipo de aplicaciones que estemos desarrollando y para qué tipo de entorno, en este artículo voy a realizar solo unas pruebas de corte rudimentario con dos herramientas sobre un esquema de aplicativo de escritorio.

La comparación planteada tiene que ver con la utilización de ADO.NET para estructuras como DataSet, DataTable y DataReader de esta forma analizar la performance de cada enfoque.

Les presento el aplicativo, muy simple para la demostración

Lenguaje utilizado: C#

Motor de Datos: SQLExpress 2005


Como muestra la figura anterior solo un formulario que posee tres botones, cada uno llama a métodos específicos de una clase con el nombre "Data" que posee la lógica de manejo de datos a evaluar.

Veamos el manejo del formulario en código:


Solo con llamadas a la clase "Data" que posee la lógica, ahora les presento esta clase de forma muy básica y para solo el desempeño de esta práctica, este código no es producción bajo ningún punto.



En la figura anterior se muestra la clase de prueba "Data" que mantiene la lógica para el análisis, se visualiza el método correspondiente al DataTable, y como detalle traigo completamente todos los campos de la tabla clientes.

Bien, ahora les presento dos herramientas que voy a utilizar para hacer profiling de código:

  1. Performance Tool
  2. DotTrace 3.0

Voy a comenzar por analizar Performance Tool que es una herramienta que está disponible en el Visual Studio:


Voy a poner a funcionar el análisis para visualizar los resultados, en realidad es mucha la información que nos brinda la herramienta por este motivo yo voy a realizar algunos comentarios nada más para no hacer extenso este artículo.


En la figura anterior les muestro ya el informe que me brinda la herramienta, y como punto destacado podemos observar que el método Fill del SqlDataAdapter para el DataSet tiene un tiempo exclusivo de ejecución mucho menor que el del DataTable por ejemplo (hay artículos que reportan la estructura y optimización con que se desarrollo ADONET).


Esta figura muestra el Reader y sus 128 llamadas al método Read para realizar la lectura y su total es mucho menor que cualquiera de los otros métodos del DataSet o del Datatable con solo 0,29.

Podríamos extrapolar varios valor y sacar conclusiones muy interesantes sobre este simple ejemplo, pero quiero mostrarles la segunda herramienta que brinda más información ya del trabajo interno que proporciona el Dotnet framework.


La figura anterior ratifica las pruebas realizadas anteriormente con el performance tool de Visual Studio vemos que el Fill del DataSet por poco pero es más efectivo que su contraparte del DataTable y si la ventaja del Reader en lectura es muy considerable, pero podemos analizar más internamente que ocurre por ejemplo en el Fill del DataTable, veamos:


Como podemos observar tenemos el detalle completo para poder analizar nuestra aplicación a fondo, les cuento que también podemos tomar instantáneas sobre diversos rangos de tiempo de nuestra aplicación y podemos analizar la memoria también, como el GC y demás que en futuros artículos voy a intentar exponer.

La conclusión es "No da igual utilizar una estructura u otra", todo tiene un objetivo y además disponemos de muy buenas herramientas para validar nuestras sentencias de código, y además nuestra arquitectura candidata, espero les sea de utilidad.

Nota: una fuente interesante de inspiración fueron las notas de Carlos Walzer y sus exposiciones.

Comentarios

Publicar un comentario

Entradas más populares de este blog

Modelando relaciones en UML, un acercamiento a las Asociaciones

Utilizando Intents implícitos para crear actividades

Secuencias…Modelado indispensable