Menu
Coddy logo textTech

Loop Performance

Parte de la sección Lógica y Flujo del Journey de C# de Coddy — lección 13 de 66.

Optimizar el rendimiento de los bucles puede mejorar significativamente la velocidad de su aplicación, especialmente con conjuntos de datos grandes.

Almacena la longitud de la colección en una variable antes del bucle:

int[] numbers = { 1, 2, 3, 4, 5 };
int length = numbers.Length; // Almacena la longitud una vez

for (int i = 0; i < length; i++) // Usa el valor almacenado
{
    Console.WriteLine(numbers[i]);
}

Evite llamadas repetidas a métodos en las condiciones de los bucles, por ejemplo:

for (int i = 0; i < GetCount(); i++)
{
    // Loop body
}

El método GetCount() se llama en cada iteración del bucle. Esto significa que si el bucle se ejecuta 1000 veces, GetCount() se ejecutará también 1000 veces, porque la condición del bucle se evalúa antes de cada iteración.

Aquí está cómo hacerlo correctamente:

int count = GetCount();
for (int i = 0; i < count; i++)
{
    // Cuerpo del bucle
}

GetCount() se llama solo una vez antes de que comience el bucle, y su valor se almacena en la variable count. Luego, el bucle usa este valor almacenado para todas las iteraciones, eliminando la necesidad de llamar repetidamente al método.

Este enfoque puede hacer que su código se ejecute más rápido al reducir operaciones redundantes, especialmente cuando el método que se llama realiza cálculos complejos o acceso a datos.

challenge icon

Desafío

Fácil

Crea un método llamado optimizedSum que:

  1. Toma un arreglo de enteros como parámetro
  2. Calcula la suma de todos los elementos
  3. Implementa tanto un enfoque optimizado como no optimizado:
    • No optimizado: Llama a array.Length en cada iteración del bucle
    • Optimizado: Almacena en caché la longitud antes del bucle
  4. Devuelve el resultado del enfoque optimizado

Hoja de referencia

Almacene la longitud de la colección en una variable antes del bucle para evitar el acceso repetido a la propiedad:

int[] numbers = { 1, 2, 3, 4, 5 };
int length = numbers.Length; // Store length once

for (int i = 0; i < length; i++) // Use stored value
{
    Console.WriteLine(numbers[i]);
}

Evite llamadas repetidas a métodos en las condiciones del bucle almacenando el resultado:

// Inefficient - method called every iteration
for (int i = 0; i < GetCount(); i++)
{
    // Loop body
}

// Optimized - method called once
int count = GetCount();
for (int i = 0; i < count; i++)
{
    // Loop body
}

Pruébalo tú mismo

public class OptimizedSum
{
    // Implementa el método optimizedSum
    public static int optimizedSum(int[] numbers)
    {
        // Escribe tu código aquí
        
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo