Mejorar el rendimiento de la biblioteca de clases base.

by Valeriano Tortola 13. septiembre 2007 15:18

Consejos y trucos para el rendimiento de la biblioteca de clases base,  así se titula un articulo de CLR Inside Out (en castellano) que explica buenas prácticas y trucos para mejorar el rendimiento que creo que merece la pena leer.

Aviso, no contiene conjuros ni hechizos que hagan que una aplicación chatarra mágicamente vuele y mejore su consumo de RAM.

La mejora del rendimiento en la mayoria de los casos es una cuestión de diseño y de la suma de infinidad de pequeñas cosas como las que se comenta en este artículo. Utilizar una instrucción más optima que otra no nos hace ganar segundos, ni milisegundos, ganamos ciclos de CPU; es la suma de elecciones correctas durante el desarrollo y el correcto uso del framework lo que nos da la mejora tangible de rendimiento deseada. Pero no hay que olvidar la importancia de un buen diseño, por ejemplo si yo quisiese crear una bicicleta de carreras para correr el "Tour" y hago un triciclo de niños, por muy aerodinámico que sea, cuadro de fibra de carbono y ruedas Michelin .... sigue siendo un triciclo.

Tags:

.NET 2.0

Enviar un Stream por eMail

by Valeriano Tortola 7. septiembre 2007 23:02

Siguiendo con lo de enviar un archivo por eMail, puede ser que lo que queramos enviar no este en el sistema de archivos, si no que este en la memoria de nuestro programa. Un ejemplo de esto es que exportemos el contenido de un DataGridView a formato Excel ó hayamos dibujado un gráfico con GDI+ ... ó cualquier cosa que se os ocurra ... y lo queramos enviar por eMail como archivo adjunto, al igual que enviar un Stream por FTP, enviar un Stream como archivo adjunto también pude ser muy útil.

Ahí va un sencillo ejemplo:

Mas...

Tags: , ,

.NET 2.0 | C# 2.0

Descargando un fichero por FTP

by Valeriano Tortola 6. septiembre 2007 15:16

Siguiendo con el tema de Enviar un archivo por FTP y Enviar un Stream por FTP , vamos ahora con la descarga. También nos puede ser útil poder descargar archivos por FTP, para cosas como descargar copias de seguridad de un servidor ó realizar la copia en si misma, descargar archivos de servidores de forma sencilla y con autenticación, etc .. etc...

Ahí va un sencillo ejemplo:

Mas...

Tags: , , ,

.NET 2.0 | C# 2.0

DB Factory con ADO.NET 2.0

by Valeriano Tortola 5. septiembre 2007 18:08

Muchas veces, nos encontramos ante la necesidad de escribir aplicaciones que puedan trabajar con cualquier tipo de base de datos, evitando en la máxima medida tener que modificar el código de la aplicación para ello. Para solventar este problema, siempre se ha recurrido al “modelo de n capas” donde una de ellas, era el proveedor de acceso a datos y se encargaba de abstraer esta tarea, normalmente encapsulada en una librería .dll que se cambiaba a voluntad sin que ello supusiese ningún problema para la aplicación. Esta librería, suele contener lo que se denomina un DBFactory, una clase abstracta o conjunto de funciones encargadas de adaptarse a la base de datos que se le indique y obtener datos de forma transparente para su consumidor, esta semana he descubierto como hacerlo con ADO.NET 2.0 sin tener que codificar a penas nada con las clases que habitan en System.Data.Common.

El ejemplo lo voy a hacer con SQL Server 2005 Express Edition y la base de datos de ejemplo "Northwind" que trae por defecto :).

Mas...

Tags:

.NET 2.0 | C# 2.0 | ADO.NET

Depurando con .NET

by Valeriano Tortola 4. septiembre 2007 17:57

No siempre llenar el código de breakpoints ó seguir step-by-step ejecuciones largas es lo más recomendable para depurar el funcionamiento de nuestra aplicación en desarrollo , podemos apoyarnos en las clases Debugger, Debug y Trace de System.Diagnostics para realizar diagnósticos más rápidos y sobre todo que sean condicionados, de forma que solo pare ó solo registre una línea de log de actividad cuando nos interesa que lo haga.

Así que pasando un poco de las inestimables ayudas de Visual Studio 2005 para estos menesteres esta vez, voy a dar un resumen rápido de la utilidad de estas clases de ayuda al depurado. Las clases Debug y Trace son prácticamente iguales, la diferencia estriba en que la primera solo funciona en modo DEBUG y la segunda también en RELEASE. Por lo tanto lo que escriba de uno es aplicable al otro, pero tened en cuenta esta diferencia. Por ejemplo, el DefaultTraceListener (que se explica más adelante) está entre los listeners de Trace, no de Debug, aunque sea el que va conectado a la ventana ouput de Visual Studio 2005 ;)

Mas...

Tags:

.NET 2.0 | C# 2.0

Obtener la salida de un comando de consola

by Valeriano Tortola 4. septiembre 2007 12:50

En ocasiones, necesitamos que nuestra aplicación ejecute un comando de consola (cmd.exe) para obtener datos de alguna aplicación de consola ó simplemente para poner en marcha un servicio. La manera sencilla y tosca res ejecutar el comando redirigiendo la salida a un archivo, después abrir el archivo y coger el resultado para procesarlo.

Este ejemplo presenta la forma elegante, creamos un proceso y redirigimos los Streams de entrada y salida hacia nuestro programa para poder enviar y recibir datos de forma asíncrona.

Mas...

Tags: , , ,

.NET 2.0 | C# 2.0

Enviar un Stream por FTP

by Valeriano Tortola 2. septiembre 2007 18:50

Siguiendo con el artículo sobre como enviar un archivo por FTP, no siempre lo que queremos enviar esta ya materializado en el sistema de archivos, puede ser también un archivo que estemos generando en memoria, como un reporte, un archivo .pdf, .xml .. etc.. etc.. y tener que guardarlo en disco para luego poderlo enviar por FTP es molesto, asi que aquí va un ejemplo de como enviar el contenido de un Stream (ó derivado) a un FTP:

Mas...

Tags: , , ,

.NET 2.0 | C# 2.0

Enviar un archivo por eMail

by Valeriano Tortola 1. septiembre 2007 18:18

Siguiendo la línea del artículo anterior donde explicaba como subir un archivo vía FTP, voy a mostrar ahora como enviar un archivo vía email con las clases contenidas en System.Net.Mail. Esta funcionalidad, puede ser más útil para informar de excepciones en una aplicación instalada en el cliente, comunicar alguna eventualidad, etc.. etc…

Ojo que esta no es la implementación de un servidor SMTP y que solo actúa como cliente de correo en modo de envio, por lo que es necesario que tengamos una cuenta de correo y un acceso SMTP (Hotmail no tiene SMTP gratuito, Gmail si, ó usa tu propio servidor si lo tienes).

El ejemplo es bastante claro y sencillo:

Mas...

Tags: , ,

.NET 2.0 | C# 2.0

Enviar un archivo por FTP

by Valeriano Tortola 1. septiembre 2007 09:00

Puede resultar muy útil que nuestra aplicación pueda enviar los resultados de sus acciones o depositarlos en un servidor FTP, nos puede servir tanto para enviar periódicamente archivos de log, resultados, estadísticas o cualquier otro tipo de fichero.

Este es un sencillo ejemplo de una función que envia un archivo por FTP a un determinada ruta remota:

Mas...

Tags: , ,

.NET 2.0 | C# 2.0

El Inlining

by Valeriano Tortola 1. septiembre 2007 06:00

A menudo al hablar de optimización de código se habla del inlining (código en línea) como técnica de optimización que realiza el del JIT, pero ... en que consiste?

Pues se trata de substituir el código de una llamada a función por el cuerpo de dicha función, de forma que se evita el paso de parámetros y manejo de bloques de activación. Una de las ventajas de trabajar distrubuyendo el código en funciones es su posterior reutilización, pero a la hora de compilar, si las funciones son pequeñas pueden crear una perdida de rendimiento grande en comparación a la ventaja de la reutilización de código, por lo que muchos compiladores realizan este proceso de inlining para determinadas funciones. Esto se aplica también a las propiedades y sus get/set, que suelen ser pequeños métodos.

Mas...

Tags: , ,

.NET 2.0