Paweł Łukasiewicz
2019-06-23
Paweł Łukasiewicz
2019-06-23
Udostępnij Udostępnij Kontakt
Wprowadzenie

Ostatni wpis z tej krótkiej serii dotyczy problemu na który natknąłem się analizują kod mający przeszło 8 lat. Zanim jednak przejdziemy do sedna problemu zachęcam do przeczytania poprzednich artykułów z tej serii:

Jako programiści nie lubimy pisać zbyt długiego kodu. Późniejsza interpretacja może być problematyczna a sam kod będzie ciągnął się przez wiele linii. Warto mieć jednak na uwadze, że czasem (pozorna) oszczędność może doprowdzić do pojawienia się wielu problemów związanych z wydajnością naszego kodu. Analizując kod natrafiłem na wielokrotne używanie Array.Length wewnątrz pętli for. Taki zapis powoduje wywołanie właściwości Length wraz z każdą iteracją – wydłuża to znacznie czas każdego przejścia. Dużo lepszym wyjściem jest przechowywanie tej wartości w zmiennej i używanie jej w zdefiniowanym warunku.

Testy

Czasami kod wyraża więcej niż kilka zdań artykułu. Poniżej kod napisany w celu przeprowadzania testów:

static void Main(string[] args)
{
    Stopwatch stopwatch = new Stopwatch();

    string[] cars = {
        "Audi RS6",
        "Pagani Huayra",
        "Maserati Gran Tourismo",
        "Nissan GTR",
        "Lamborghini Huracan Performante"
    };

    stopwatch.Start();
    for (int i = 0; i < cars.Length; i++)
    {

    }
    Console.WriteLine(".Length wewnątrz petli: " + stopwatch.ElapsedTicks.ToString());

    stopwatch.Restart();
    int counter = cars.Length;
    for (int i = 0; i < counter; i++)
    {

    }
    Console.WriteLine(".Length jako parametr: " + stopwatch.ElapsedTicks.ToString());

    Console.ReadKey();
}
Mam nadzieję, że wynik dla niego nie będzie zaskoczeniem. We wprowadzeniu zawarłem wszystkie istotne informacje związane z użyciem właściwości Length. C#: porównianie czasu wywołania właściwości Array.Length

Podsumowanie

Jest to ostatni wpis z tej serii. Jeżeli uda mi się wygospodarować więcej czasu chciałbym poruszyć podobną tematyką związaną ze stroną bazy danych. Tam również udało się znaleźć wiele interesujących przypadków - w tej części jednak skupiłem się na języku C#.