Optimización de la evaluación de condiciones

by Valeriano Tortola 6. octubre 2007 02:51

En C#, el orden de evaluación de operadores es de izquierda a derecha por orden de prioridad en cualquier tipo de operación. Además, a la hora de evaluar condiciones lógicas se puede anticipar el resultado final si el resultado parcial hasta el momento es inamovible, es decir, que pase lo que pase en el resto de condiciones el resultado parcial será el definitivo, en ese caso, el resto de condiciones no son evaluadas.

Desde el punto de vista del rendimiento, nos permite ahorrar evaluaciones (y con ello instrucciones) innecesarias en nuestra lógica si nos aprovechamos bien de esta característica.

Mas...

Tags: ,

.NET 2.0 | C# 2.0

CLR String Interning

by Valeriano Tortola 4. octubre 2007 22:29

Un String, es un tipo de referencia especial llamado inmutable, que quiere decir que el dato almacenado en el heap no se puede cambiar, cuando asignamos un nuevo valor a una variable de este tipo, un nuevo dato es generado en otra posición del heap y su dirección de memoria asignada a dicha variable, el dato anterior queda listo para ser GarbageCollected. Bien, pues este comportamiento que ... a unos les gusta más... a otros menos... se ideó así para evitar condiciones de anticipación en entornos multithreading tanto por motivos de consistencia como de seguridad, y tiene la evidente desventaja del engorro de memoria y trabajo extra para el GC que provoca.

El String Interning es una técnica de optimización que aplica el CLR sobre los String, que consiste en que los literales de este tipo de nuestro dominio de aplicación, son almacenados en un HashTable interno, de forma que si dos variables tienen el mismo valor y este ha sido internado, ambas variables apuntan a la misma referencia. Esto es facilmente comprobable con este simple código:

Mas...

Tags: , ,

.NET 2.0 | C# 2.0

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

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

Guia de Testeo de Rendimiento para Aplicaciones Web

by Valeriano Tortola 31. agosto 2007 00:00

Leo através del blog de Rico Mariani que JD Meier ha anunciado la versión final de la guía Performance Testing Guidance for Web Applications, que se suma al proyecto Performance Testing Guidance.

Estas guías proponen metodologías y técnicas para hacer tests de rendimiento en aplicaciones Web y Windows por medio de las herramientas que provee Visua Studio 2005 y Visual Studio 2005 Team System.

He estado echando un vistazo y ambos tienen muy buena pinta, como muestra este How To: Identificar funciones causantes de un cuello de botella por alto consumo de tiempo de usuario de CPU en aplicaciones servidor en un entorno de producción.

Merece la pena leer este trabajo.

Tags:

.NET 2.0

Modelo de ejecucion del .NET Framework. El CLR

by Valeriano Tortola 28. agosto 2007 04:48

Siguiendo con el artículo anterior donde explicaba que es el código administrado MSIL, voy a explicar ahora también de forma breve como el CLR (Common Language Runtime) ejecuta dicho código con la ayuda del JIT (Just In Time compiler), y cuales son las ventajas y características de este modelo de ejecución. Este es más extenso que el anterior, aunque está todo bastante resumido y explicado por encima espero que resulte interesante. 

Como comentaba, una vez generado el código administrado se compone un ensamblado junto los metadatos, el manifiesto que lo describe y los recursos que se hayan decidido incluir en él, estos datos permiten al CLR obtener información del ensamblado, sus tipos y recuperar el código administrado cuando se requiera.

El CLR es una máquina virtual, un entorno de ejecución para nuestro código MSIL, que provee las siguientes características:

Mas...

Tags: , , ,

.NET 2.0