Performance des boucles
Fait partie de la section Logique & Flux du Journey C# de Coddy — leçon 13 sur 66.
Optimiser les performances des boucles peut considérablement améliorer la vitesse de votre application, en particulier avec de grands ensembles de données.
Stocker la longueur de la collection dans une variable avant la boucle :
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]);
}Évitez les appels répétés de méthodes dans les conditions de boucle, par exemple :
for (int i = 0; i < GetCount(); i++)
{
// Loop body
}La méthode GetCount() est appelée à chaque itération de la boucle. Cela signifie que si la boucle s'exécute 1000 fois, GetCount() sera exécutée 1000 fois également, car la condition de la boucle est évaluée avant chaque itération.
Voici comment le faire correctement :
int count = GetCount();
for (int i = 0; i < count; i++)
{
// Loop body
}GetCount() n’est appelée qu’une seule fois avant le début de la boucle, et sa valeur est stockée dans la variable count. Ensuite, la boucle utilise cette valeur stockée pour toutes les itérations, éliminant le besoin d’appeler la méthode de manière répétée.
Cette approche peut rendre votre code plus rapide en réduisant les opérations redondantes, en particulier lorsque la méthode appelée effectue des calculs complexes ou un accès aux données.
Défi
FacileCréez une méthode appelée optimizedSum qui :
- Prend un tableau d'entiers comme paramètre
- Calcule la somme de tous les éléments
- Implémente à la fois une approche optimisée et non optimisée :
- Non optimisée : Appeler array.Length à chaque itération de la boucle
- Optimisée : Mettre en cache la longueur avant la boucle
- Retourne le résultat de l'approche optimisée
Aide-mémoire
Stocker la longueur de la collection dans une variable avant la boucle pour éviter les accès répétés à la propriété :
int[] numbers = { 1, 2, 3, 4, 5 };
int length = numbers.Length; // Stocker la longueur une seule fois
for (int i = 0; i < length; i++) // Utiliser la valeur stockée
{
Console.WriteLine(numbers[i]);
}Éviter les appels répétés de méthode dans les conditions de boucle en mettant en cache le résultat :
// Inefficace - méthode appelée à chaque itération
for (int i = 0; i < GetCount(); i++)
{
// Corps de la boucle
}
// Optimisé - méthode appelée une seule fois
int count = GetCount();
for (int i = 0; i < count; i++)
{
// Corps de la boucle
}Essayez vous-même
public class OptimizedSum
{
// Implémentez la méthode optimizedSum
public static int optimizedSum(int[] numbers)
{
// Écrivez votre code ici
}
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique & Flux
1Tableaux multidimensionnels
Bases des tableaux 2DDéclaration et initialisation en 2DAccès aux éléments d'un tableau 2DBoucles imbriquées et tableaux 2DTableaux irréguliersOpérations matricielles courantesRécapitulatif - Multidimensionnel4Techniques de contrôle de flux
Retours anticipésClauses de gardeInstructions de saut (goto)Break et ContinueAplatir les conditionnelles imbriquées2Prise de décision avancée
Conditions multiplesLogique booléenne complexeComparaison If vs SwitchInstructions Switch imbriquéesRécapitulatif - Décisions avancées5Gestion des exceptions
Bases du Try-CatchTypes d'exceptionsBlocs Catch multiplesManipulation de fichiersLe bloc FinallyUsing vs Try-FinallyExceptions personnaliséesRécapitulatif - Gestion des erreurs3Améliorations des boucles
Performance des bouclesItération de structures complexesChaque type de boucleRefactorisation des bouclesRécapitulatif - Boucles optimisées6Gestion des valeurs nulles
Les bases des références nullesTypes valeur nullablesPatterns de vérification de nullitéProgrammation défensiveRécapitulatif - Null Safety