Share via


Rendimiento (Guía de programación de C#)

Actualización: Julio de 2008

El término rendimiento suele hacer referencia a la velocidad de ejecución de un programa. En ocasiones, es posible incrementar la velocidad de ejecución si se siguen algunas reglas básicas en el código fuente. En algunos programas, es importante examinar el código con detenimiento y usar generadores de perfiles para asegurarse de que se está ejecutando a la mayor velocidad posible. En otros programas no es necesario realizar esta optimización, ya que el código se ejecuta a una velocidad aceptable según se escribe.

Al medir y optimizar el rendimiento, se deben seguir estas instrucciones generales:

  • Comience por establecer objetivos de rendimiento y medir el rendimiento del programa a fin de determinar en qué casos no cumple dichos objetivos el código.

  • Escriba el código de forma que sea correcto, siga los principios de diseño adecuados y exprese claramente su intención desde el principio. Realice optimizaciones más adelante solamente si determina que éste no cumple los objetivos de rendimiento. El código optimizado para un mejor rendimiento suele ser más difícil de leer y mantener. En general, es mejor escribir código que sea legible, sólido y fácil de mantener aunque sea algo más lento que el código más optimizado que podría escribir.

  • Si debe optimizar, empiece por las partes más lentas del programa. Si determina que un programa no cumple los objetivos de rendimiento, identifique las ubicaciones específicas en las que éste se puede mejorar y los problemas de rendimiento que son las causas principales del error. No suele tener sentido optimizar un método al que se llama en pocas ocasiones, ni optimizar un método A para que se ejecute en menos de 50 milisegundos si el programa en su totalidad tiene que esperar 30 segundos para que el método B se ejecute en otro subproceso.

Conversiones boxing y unboxing

Es conveniente evitar el uso de tipos de valor en situaciones donde se les debe aplicar la conversión boxing un gran número de veces, por ejemplo en clases de colecciones no genéricas como System.Collections.ArrayList. Para evitar la conversión boxing de los tipos de valor, utilice colecciones genéricas como System.Collections.Generic.List<T>. Las conversiones boxing y unboxing son procesos que consumen muchos recursos. Cuando se aplica la conversión boxing a un tipo de valor, se debe crear un objeto completamente nuevo. Esto puede llevar hasta 20 veces más que una asignación de referencias sencilla. Al aplicar la conversión unboxing, el proceso de conversión puede llevar hasta cuatro veces más que una asignación. Para obtener más información, vea Boxing y Unboxing.

Cadenas

Al concatenar un gran número de variables de cadena (por ejemplo, en un bucle ajustado), use System.Text.StringBuilder en lugar del operador + de C#. Para obtener más información, vea Cómo: Concatenar varias cadenas (Guía de programación de C#).

Destructores

No se deben utilizar destructores vacíos. Cuando una clase contiene un destructor, se crea una entrada en la cola Finalize. Cuando se llama al destructor, se invoca al recolector de elementos no utilizados para procesar la cola. Si el destructor está vacío, simplemente se produce una pérdida de rendimiento. Para obtener más información, vea Destructores (Guía de programación de C#).

Otros recursos

Vea también

Conceptos

Guía de programación de C#

Referencia

Seguridad (Guía de programación de C#)

Historial de cambios

Fecha

Historial

Motivo

Julio de 2008

Se ha agregado información a la sección sobre conversión boxing y unboxing.

Mejora de la información.

Julio de 2008

Añadida sección sobre cadenas.

Mejora de la información.

Julio de 2008

Se ha añadido información a la introducción.

Mejora de la información.