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.
Desafio
FácilCrie um método chamado optimizedSum que:
- Recebe um array de inteiros como parâmetro
- Calcula a soma de todos os elementos
- 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
- 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
}
}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
1Multi-dimensional Arrays
2D Arrays BasicsDeclaring and Initializing 2DAccessing 2D Array ElementsNested Loops with 2D ArraysJagged ArraysCommon Matrix OperationsRecap - Multi-dimensional4Flow Control Techniques
Early ReturnsGuard ClausesJump Statements (goto)Break and ContinueFlatten Nested Conditionals7Logical Operators Advanced
Short-Circuit EvaluationConditional Logical OperatorsOperator PrecedenceRecap - Advanced Operators2Advanced Decision Making
Multiple ConditionsComplex Boolean LogicIf vs. Switch ComparisonNested Switch StatementsRecap - Advanced Decisions5Exception Handling
Try-Catch BasicsException TypesMultiple Catch BlocksWorking with FilesFinally BlockUsing vs. Try-FinallyCustom ExceptionsRecap - Error Handling3Loop Enhancements
Loop PerformanceIterating ComplexEach Loop TypeRefactoring LoopsRecap - Optimized Loops6Null Handling
Null Reference BasicsNullable Value TypesNull Checking PatternsDefensive ProgrammingRecap - Null Safety