Menu
Coddy logo textTech

Loop Performance

Parte da seção Lógica & Fluxo do Journey de C# da Coddy — lição 13 de 66.

Otimizar o desempenho de loops pode melhorar significativamente a velocidade da sua aplicação, especialmente com grandes conjuntos de dados.

Armazene o comprimento da coleção em uma variável antes do loop:

int[] numbers = { 1, 2, 3, 4, 5 };
int length = numbers.Length; // Armazene o comprimento uma vez

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

Evite chamadas repetidas de método em condições de loop, por exemplo:

for (int i = 0; i < GetCount(); i++)
{
    // Corpo do loop
}

O método GetCount() é chamado em cada iteração do loop. Isso significa que, se o loop executar 1000 vezes, o GetCount() será executado 1000 vezes também, porque a condição do loop é avaliada antes de cada iteração.

Aqui está como fazer corretamente:

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

GetCount() é chamado apenas uma vez antes do loop começar, e seu valor é armazenado na variável count. Em seguida, o loop usa esse valor armazenado para todas as iterações, eliminando a necessidade de chamar o método repetidamente.

Essa abordagem pode fazer com que seu código execute mais rapidamente, reduzindo operações redundantes, especialmente quando o método chamado realiza cálculos complexos ou acesso a dados.

challenge icon

Desafio

Fácil

Crie um método chamado optimizedSum que:

  1. Recebe um array de inteiros como parâmetro
  2. Calcula a soma de todos os elementos
  3. Implementa tanto uma abordagem otimizada quanto não otimizada:
    • Não otimizada: Chame array.Length em cada iteração do loop
    • Otimizada: Armazene o comprimento em cache antes do loop
  4. Retorna o resultado da abordagem otimizada

Folha de consulta

Armazene o comprimento da coleção em uma variável antes do loop para evitar acesso repetido à propriedade:

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 chamadas repetidas de método nas condições do loop armazenando o resultado em cache:

// 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
}

Experimente você mesmo

public class OptimizedSum
{
    // Implemente o método optimizedSum
    public static int optimizedSum(int[] numbers)
    {
        // Escreva seu código aqui
        
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo