Desempenho de Loops
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 length uma vez
for (int i = 0; i < length; i++) // Use o valor armazenado
{
Console.WriteLine(numbers[i]);
}Evite chamadas repetidas de métodos nas condições de loops, 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 for executado 1000 vezes, GetCount() também será executado 1000 vezes, porque a condição do loop é avaliada antes de cada iteração.
Veja como fazer isso corretamente:
int count = GetCount();
for (int i = 0; i < count; i++)
{
// Corpo do loop
}GetCount() é chamado apenas uma vez antes do início do loop, e seu valor é armazenado na variável count. Em seguida, o loop usa esse valor armazenado em todas as iterações, eliminando a necessidade de chamar repetidamente o método.
Essa abordagem pode fazer seu código ser executado mais rapidamente ao reduzir operações redundantes, especialmente quando o método chamado realiza cálculos complexos ou acesso a dados.
Desafio
FácilCrie um método chamado optimizedSum que:
- Receba um array de inteiros como parâmetro
- Calcule a soma de todos os elementos
- Implemente uma abordagem otimizada e uma não otimizada:
- Não otimizada: chame array.Length em cada iteração do loop
- Otimizada: armazene o comprimento em cache antes do loop
- Retorne o resultado da abordagem otimizada
Experimente você mesmo
public class OptimizedSum
{
// Implemente o método optimizedSum
public static int optimizedSum(int[] numbers)
{
// Escreva seu código aqui
}
}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
1Matrizes Multidimensionais
Noções Básicas de Matrizes 2DDeclaração e Inicialização de Matrizes 2DAcesso aos Elementos de Matrizes 2DLoops Aninhados com Matrizes 2DMatrizes IrregularesOperações Comuns com MatrizesRevisão - Multidimensional4Técnicas de Controle de Fluxo
Retornos AntecipadosCláusulas de GuardaInstruções de Salto (goto)Break e ContinueSimplificando Condicionais Aninhadas7Operadores Lógicos Avançados
Avaliação de Curto-CircuitoOperadores Lógicos CondicionaisPrecedência de OperadoresRevisão - Operadores Avançados2Tomada de Decisões Avançada
Múltiplas CondiçõesLógica Booleana ComplexaComparação entre If e SwitchInstruções Switch AninhadasRevisão - Decisões Avançadas5Tratamento de Exceções
Noções básicas de Try-CatchTipos de ExceçãoMúltiplos blocos CatchTrabalhando com ArquivosBloco FinallyUsando Using vs. Try-FinallyExceções PersonalizadasRecapitulação - Tratamento de Erros3Aprimoramentos de Loops
Desempenho de LoopsIteração de Estruturas ComplexasCada Tipo de LoopRefatoração de LoopsRevisão - Loops Otimizados6Tratamento de Nulos
Fundamentos de Referências NulasTipos de Valor AnuláveisPadrões de Verificação de NulosProgramação DefensivaRecapitulação — Segurança contra NulosPratique por conta própria: Compilador de C# online