Wydajność pętli
Część sekcji Logika i sterowanie przepływem ścieżki C# w Coddy. Lekcja 13 z 66.
Optymalizacja wydajności pętli może znacznie zwiększyć szybkość działania Twojej aplikacji, zwłaszcza w przypadku dużych zbiorów danych.
Przed pętlą zapisz długość kolekcji w zmiennej:
int[] numbers = { 1, 2, 3, 4, 5 };
int length = numbers.Length; // Zapisz długość tylko raz
for (int i = 0; i < length; i++) // Użyj zapisanej wartości
{
Console.WriteLine(numbers[i]);
}Unikaj wielokrotnego wywoływania metod w warunkach pętli, na przykład:
for (int i = 0; i < GetCount(); i++)
{
// Loop body
}Metoda GetCount() jest wywoływana przy każdej iteracji pętli. Oznacza to, że jeśli pętla wykona się 1000 razy, GetCount() również zostanie wykonana 1000 razy, ponieważ warunek pętli jest sprawdzany przed każdą iteracją.
Oto jak zrobić to poprawnie:
int count = GetCount();
for (int i = 0; i < count; i++)
{
// Ciało pętli
}GetCount() jest wywoływane tylko raz przed rozpoczęciem pętli, a jego wartość jest przechowywana w zmiennej count. Następnie pętla używa tej zapisanej wartości we wszystkich iteracjach, eliminując potrzebę wielokrotnego wywoływania metody.
To podejście może przyspieszyć działanie kodu przez ograniczenie zbędnych operacji, zwłaszcza gdy wywoływana metoda wykonuje złożone obliczenia lub uzyskuje dostęp do danych.
Wyzwanie
ŁatwyUtwórz metodę o nazwie optimizedSum, która:
- Przyjmuje tablicę liczb całkowitych jako parametr
- Oblicza sumę wszystkich elementów
- Implementuje podejście zoptymalizowane i niezoptymalizowane:
- Niezoptymalizowane: wywołuje array.Length w każdej iteracji pętli
- Zoptymalizowane: buforuje długość przed pętlą
- Zwraca wynik zoptymalizowanego podejścia
Spróbuj swoich sił
public class OptimizedSum
{
// Zaimplementuj metodę optimizedSum
public static int optimizedSum(int[] numbers)
{
// Napisz tutaj swój kod
}
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i sterowanie przepływem
1Tablice wielowymiarowe
Podstawy tablic 2DDeklarowanie i inicjalizacja tablic 2DDostęp do elementów tablic 2DZagnieżdżone pętle z tablicami 2DTablice postrzępionePodstawowe operacje na macierzachPodsumowanie — tablice wielowymiarowe4Techniki sterowania przepływem
Wczesne zwrotyKlauzule ochronneInstrukcje skoku (goto)Break i continueSpłaszczanie zagnieżdżonych warunków7Zaawansowane operatory logiczne
Ewaluacja z krótkim spięciemWarunkowe operatory logicznePriorytet operatorówPowtórzenie — zaawansowane operatory2Zaawansowane podejmowanie decyzji
Wiele warunkówZłożona logika Boole’aPorównanie if i switchZagnieżdżone instrukcje switchPodsumowanie — zaawansowane decyzje5Obsługa wyjątków
Podstawy try-catchTypy wyjątkówWiele bloków catchPraca z plikamiBlok finallyusing a try-finallyWłasne wyjątkiPowtórzenie — obsługa błędów3Udoskonalenia pętli
Wydajność pętliIterowanie po złożonych strukturachKażdy typ pętliRefaktoryzacja pętliPodsumowanie — zoptymalizowane pętle6Obsługa wartości null
Podstawy referencji nullTypy wartości dopuszczające nullWzorce sprawdzania nullProgramowanie defensywnePodsumowanie — bezpieczeństwo nullPoćwicz samodzielnie: Kompilator C# online