optymalizacja czasowa programów
Transkrypt
optymalizacja czasowa programów
Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów Inżynieria oprogramowania: optymalizacja czasowa programów Zdzisław Sroczyński Politechnika Śląska Instytut Matematyki Wydział Matematyki Stosowanej Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Priorytet: poprawność i niezawodność programów Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Priorytet: poprawność i niezawodność programów ▶ Warunki przeprowadzenia optymalizacji programu: Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Priorytet: poprawność i niezawodność programów ▶ Warunki przeprowadzenia optymalizacji programu: program wielokrotnego użycia Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Priorytet: poprawność i niezawodność programów ▶ Warunki przeprowadzenia optymalizacji programu: program wielokrotnego użycia optymalizacja przewidziana w celach projektu Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Priorytet: poprawność i niezawodność programów ▶ Warunki przeprowadzenia optymalizacji programu: program wielokrotnego użycia optymalizacja przewidziana w celach projektu określone wymogi na sprawność programu Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Priorytet: poprawność i niezawodność programów ▶ Warunki przeprowadzenia optymalizacji programu: program wielokrotnego użycia optymalizacja przewidziana w celach projektu określone wymogi na sprawność programu istotna poprawa wydajności po optymalizacji Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Priorytet: poprawność i niezawodność programów ▶ Warunki przeprowadzenia optymalizacji programu: program wielokrotnego użycia optymalizacja przewidziana w celach projektu określone wymogi na sprawność programu istotna poprawa wydajności po optymalizacji ograniczenie ryzyka wprowadzenia nowych błędów Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Priorytet: poprawność i niezawodność programów ▶ Warunki przeprowadzenia optymalizacji programu: program wielokrotnego użycia optymalizacja przewidziana w celach projektu określone wymogi na sprawność programu istotna poprawa wydajności po optymalizacji ograniczenie ryzyka wprowadzenia nowych błędów ▶ Sposoby optymalizacji czasowej programów: ponowny projekt z wykorzystaniem ulepszonych algorytmów lub nowych struktur danych Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Priorytet: poprawność i niezawodność programów ▶ Warunki przeprowadzenia optymalizacji programu: program wielokrotnego użycia optymalizacja przewidziana w celach projektu określone wymogi na sprawność programu istotna poprawa wydajności po optymalizacji ograniczenie ryzyka wprowadzenia nowych błędów ▶ Sposoby optymalizacji czasowej programów: ponowny projekt z wykorzystaniem ulepszonych algorytmów lub nowych struktur danych usprawnienie fragmentów programu bez modyfikacji algorytmu jako całości Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Priorytet: poprawność i niezawodność programów ▶ Warunki przeprowadzenia optymalizacji programu: program wielokrotnego użycia optymalizacja przewidziana w celach projektu określone wymogi na sprawność programu istotna poprawa wydajności po optymalizacji ograniczenie ryzyka wprowadzenia nowych błędów ▶ Sposoby optymalizacji czasowej programów: ponowny projekt z wykorzystaniem ulepszonych algorytmów lub nowych struktur danych usprawnienie fragmentów programu bez modyfikacji algorytmu jako całości Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Stosunek kosztów do wartości planowanych usprawnień Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Stosunek kosztów do wartości planowanych usprawnień ▶ Czynniki istotne podczas optymalizacji czasowej: Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Stosunek kosztów do wartości planowanych usprawnień ▶ Czynniki istotne podczas optymalizacji czasowej: profil dynamiczny programu – procent czasu zużywany przez poszczególne fragmenty Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Stosunek kosztów do wartości planowanych usprawnień ▶ Czynniki istotne podczas optymalizacji czasowej: profil dynamiczny programu – procent czasu zużywany przez poszczególne fragmenty stopień (procent) optymalizacji możliwy do osiągnięcia w poszczególnych fragmentach Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Stosunek kosztów do wartości planowanych usprawnień ▶ Czynniki istotne podczas optymalizacji czasowej: profil dynamiczny programu – procent czasu zużywany przez poszczególne fragmenty stopień (procent) optymalizacji możliwy do osiągnięcia w poszczególnych fragmentach celowość optymalizacji (rzadko używane funkcje, czas reakcji systemu w systemach czasu rzeczywistego) Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Stosunek kosztów do wartości planowanych usprawnień ▶ Czynniki istotne podczas optymalizacji czasowej: profil dynamiczny programu – procent czasu zużywany przez poszczególne fragmenty stopień (procent) optymalizacji możliwy do osiągnięcia w poszczególnych fragmentach celowość optymalizacji (rzadko używane funkcje, czas reakcji systemu w systemach czasu rzeczywistego) liczba osobogodzin koniecznych do wykonania optymalizacji w poszczególnych fragmentach – opłacalność optymalizacji Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Stosunek kosztów do wartości planowanych usprawnień ▶ Czynniki istotne podczas optymalizacji czasowej: profil dynamiczny programu – procent czasu zużywany przez poszczególne fragmenty stopień (procent) optymalizacji możliwy do osiągnięcia w poszczególnych fragmentach celowość optymalizacji (rzadko używane funkcje, czas reakcji systemu w systemach czasu rzeczywistego) liczba osobogodzin koniecznych do wykonania optymalizacji w poszczególnych fragmentach – opłacalność optymalizacji Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Wybór fragmentu pozwalającego na istotną optymalizację Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Wybór fragmentu pozwalającego na istotną optymalizację ▶ region krytyczny – stosunkowo niewielki (10%) fragment programu, który zajmuje większą część czasu wykonania (90%) Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Wybór fragmentu pozwalającego na istotną optymalizację ▶ region krytyczny – stosunkowo niewielki (10%) fragment programu, który zajmuje większą część czasu wykonania (90%) ▶ reguła 90–10 (jedna z wielu) Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Wybór fragmentu pozwalającego na istotną optymalizację ▶ region krytyczny – stosunkowo niewielki (10%) fragment programu, który zajmuje większą część czasu wykonania (90%) ▶ reguła 90–10 (jedna z wielu) ▶ metody znajdowania regionów krytycznych: Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Wybór fragmentu pozwalającego na istotną optymalizację ▶ region krytyczny – stosunkowo niewielki (10%) fragment programu, który zajmuje większą część czasu wykonania (90%) ▶ reguła 90–10 (jedna z wielu) ▶ metody znajdowania regionów krytycznych: automatyczne wyznaczenie profilu dynamicznego (za pomocą programu/modułu profilera) Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Wybór fragmentu pozwalającego na istotną optymalizację ▶ region krytyczny – stosunkowo niewielki (10%) fragment programu, który zajmuje większą część czasu wykonania (90%) ▶ reguła 90–10 (jedna z wielu) ▶ metody znajdowania regionów krytycznych: automatyczne wyznaczenie profilu dynamicznego (za pomocą programu/modułu profilera) pomiar czasu wykonywania fragmentów programu (głównie podprogramów – funkcji, metod) Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Wybór fragmentu pozwalającego na istotną optymalizację ▶ region krytyczny – stosunkowo niewielki (10%) fragment programu, który zajmuje większą część czasu wykonania (90%) ▶ reguła 90–10 (jedna z wielu) ▶ metody znajdowania regionów krytycznych: automatyczne wyznaczenie profilu dynamicznego (za pomocą programu/modułu profilera) pomiar czasu wykonywania fragmentów programu (głównie podprogramów – funkcji, metod) generowanie histogramu z wykorzystaniem przerwań sprzętowych Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów Raport profilera: Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów pomiar.php: czas wykonania programu w PHP <?php $_licznik =0; function pomiar_start ( ) { global $_licznik ; l i s t ( $usec , $sec ) = e x p l o d e ( ’ ’ , m i c r o t i m e ( ) ) ; $_licznik =(( float ) $usec + ( float ) $sec ) ; } function pomiar_stop ( $napis ) { global $_licznik ; l i s t ( $usec , $sec ) = e x p l o d e ( ’ ’ , m i c r o t i m e ( ) ) ; $czas =(( float ) $usec + ( float ) $sec )−$_licznik ; p r i n t f ( ’%s − Czas w y k o n a n i a : %.4 f<b r /> ’ , $napis , $czas ) ; } ?> Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Oszacowanie możliwych rezultatów optymalizacji Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Oszacowanie możliwych rezultatów optymalizacji ▶ Wykorzystanie heurystyki i doświadczenia programisty, przegląd możliwych do zastosowania optymalizacji Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Oszacowanie możliwych rezultatów optymalizacji ▶ Wykorzystanie heurystyki i doświadczenia programisty, przegląd możliwych do zastosowania optymalizacji ▶ Złożoność algorytmów czynnikiem utrudniającym wybór fragmentu do optymalizacji Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Oszacowanie możliwych rezultatów optymalizacji ▶ Wykorzystanie heurystyki i doświadczenia programisty, przegląd możliwych do zastosowania optymalizacji ▶ Złożoność algorytmów czynnikiem utrudniającym wybór fragmentu do optymalizacji zależność czasu wykonania od rozmiaru i/lub jakości danych wejściowych Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Oszacowanie możliwych rezultatów optymalizacji ▶ Wykorzystanie heurystyki i doświadczenia programisty, przegląd możliwych do zastosowania optymalizacji ▶ Złożoność algorytmów czynnikiem utrudniającym wybór fragmentu do optymalizacji zależność czasu wykonania od rozmiaru i/lub jakości danych wejściowych złożoność optymistyczna, pesymistyczna, średnia Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Oszacowanie możliwych rezultatów optymalizacji ▶ Wykorzystanie heurystyki i doświadczenia programisty, przegląd możliwych do zastosowania optymalizacji ▶ Złożoność algorytmów czynnikiem utrudniającym wybór fragmentu do optymalizacji zależność czasu wykonania od rozmiaru i/lub jakości danych wejściowych złożoność optymistyczna, pesymistyczna, średnia testy i pomiary powinny być wykonywane dla różnych zestawów danych, np. z określeniem odchylenia standardowego Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Oszacowanie możliwych rezultatów optymalizacji ▶ Wykorzystanie heurystyki i doświadczenia programisty, przegląd możliwych do zastosowania optymalizacji ▶ Złożoność algorytmów czynnikiem utrudniającym wybór fragmentu do optymalizacji zależność czasu wykonania od rozmiaru i/lub jakości danych wejściowych złożoność optymistyczna, pesymistyczna, średnia testy i pomiary powinny być wykonywane dla różnych zestawów danych, np. z określeniem odchylenia standardowego Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Zależność od translatora i konkretnego języka programowania (pseudokod) Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Zależność od translatora i konkretnego języka programowania (pseudokod) ▶ Zwijanie - wykonywanie czynności na etapie kompilacji, np. inicjalizacja zmiennych, wyliczanie wartości wyrażeń zawierających wyłącznie stałe, użycie dyrektyw kompilacji warunkowej. Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Zależność od translatora i konkretnego języka programowania (pseudokod) ▶ Zwijanie - wykonywanie czynności na etapie kompilacji, np. inicjalizacja zmiennych, wyliczanie wartości wyrażeń zawierających wyłącznie stałe, użycie dyrektyw kompilacji warunkowej. ▶ Zmniejszanie siły operacji - zastąpienie operacji czasochłonnych operacjami szybszymi, np. zastąpienie potęgowania mnożeniem: Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Zależność od translatora i konkretnego języka programowania (pseudokod) ▶ Zwijanie - wykonywanie czynności na etapie kompilacji, np. inicjalizacja zmiennych, wyliczanie wartości wyrażeń zawierających wyłącznie stałe, użycie dyrektyw kompilacji warunkowej. ▶ Zmniejszanie siły operacji - zastąpienie operacji czasochłonnych operacjami szybszymi, np. zastąpienie potęgowania mnożeniem: Zmniejszanie siły operacji w := a ˆ 3 ; w := a * a * a ; w :=2 * b ; w := b+b ; Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Usuwanie wyrażeń nadmiarowych - obliczanie powtarzających się wyrażeń jednorazowo z zapamiętaniem w zmiennej pomocniczej: Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Usuwanie wyrażeń nadmiarowych - obliczanie powtarzających się wyrażeń jednorazowo z zapamiętaniem w zmiennej pomocniczej: Usuwanie wyrażeń nadmiarowych x := s q r t ( z ) / s i n ( y ) + 1 6 ; w := s q r t ( z ) ; u := fn ( s q r t ( z ) / s i n ( y ) ) ; Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Usuwanie wyrażeń nadmiarowych - obliczanie powtarzających się wyrażeń jednorazowo z zapamiętaniem w zmiennej pomocniczej: Usuwanie wyrażeń nadmiarowych x := s q r t ( z ) / s i n ( y ) + 1 6 ; w := s q r t ( z ) ; u := fn ( s q r t ( z ) / s i n ( y ) ) ; Usuwanie wyrażeń nadmiarowych - poprawka p1 p2 x w u := := := := := sqrt (z) ; p1 / s i n ( y ) ; p2 + 1 6 ; p1 ; fn ( p2 ) ; Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Usuwanie wyrażeń nadmiarowych - obliczanie powtarzających się wyrażeń jednorazowo z zapamiętaniem w zmiennej pomocniczej: Usuwanie wyrażeń nadmiarowych x := s q r t ( z ) / s i n ( y ) + 1 6 ; w := s q r t ( z ) ; u := fn ( s q r t ( z ) / s i n ( y ) ) ; Usuwanie wyrażeń nadmiarowych - poprawka p1 p2 x w u := := := := := sqrt (z) ; p1 / s i n ( y ) ; p2 + 1 6 ; p1 ; fn ( p2 ) ; Usuwanie wyrażeń nadmiarowych - poprawka 2 w pom x u Zdzisław Sroczyński := := := := sqrt (z) ; w / sin (y) ; pom + 1 6 ; fn ( pom ) ; Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Usuwanie wyrażeń niezmienniczych - jednokrotne wyliczenie przed pętlą wartości wyrażeń, które nie zależą od wartości zmiennej sterującej, ani innych zmiennych modyfikowanych w ciele pętli: Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Usuwanie wyrażeń niezmienniczych - jednokrotne wyliczenie przed pętlą wartości wyrażeń, które nie zależą od wartości zmiennej sterującej, ani innych zmiennych modyfikowanych w ciele pętli: Usuwanie wyrażeń niezmienniczych f o r i := 1 t o 100 do t [ i ] := s i n ( y ) * t [ i ] ; Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Usuwanie wyrażeń niezmienniczych - jednokrotne wyliczenie przed pętlą wartości wyrażeń, które nie zależą od wartości zmiennej sterującej, ani innych zmiennych modyfikowanych w ciele pętli: Usuwanie wyrażeń niezmienniczych f o r i := 1 t o 100 do t [ i ] := s i n ( y ) * t [ i ] ; Usuwanie wyrażeń niezmienniczych - poprawka pom := s i n ( y ) ; f o r i := 1 t o 100 do t [ i ] := pom * t [ i ] ; Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów PHP - usuwanie wyrażeń niezmienniczych <?php i n c l u d e ( ’ p o m i a r . php ’ ) ; pomiar_start ( ) ; ob start () ; f o r ( $j =1; $j <=100;$j++) f o r ( $i =1; $i <=3600; $i++) echo ’ Kąt w s t o p n i a c h : ’ . $i . ’ = Kąt w r a d i a n a c h : ob clean () ; pomiar_stop ( ’ W a r i a n t 1 − P o w t a r z a n i e o b l i c z e ń ’ ) ; ’ . ( $i * 3 . 1 4 / 1 8 0 ) . ’<b r /> ’ ; pomiar_start ( ) ; ob start () ; $strd = 3 . 1 4 / 1 8 0 ; f o r ( $j =1; $j <=100;$j++) f o r ( $i =1; $i <=3600; $i++) echo ’ Kąt w s t o p n i a c h : ’ . $i . ’ = Kąt w r a d i a n a c h : ’ . ( $i * $strd ) . ’<b r /> ’ ; ob clean () ; pomiar_stop ( ’ W a r i a n t 2 − Bez p o w t a r z a n i a o b l i c z e ń ’ ) ; ?> Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Rozszczepianie - podział pętli w przypadku, gdy wewnątrz pętli występuje warunek niezależny od zmiennej sterującej: Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Rozszczepianie - podział pętli w przypadku, gdy wewnątrz pętli występuje warunek niezależny od zmiennej sterującej: Rozszczepianie f o r i := 1 t o nmax do i f dodawanie=true t h e n a := a + n else a := a − n ; Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Rozszczepianie - podział pętli w przypadku, gdy wewnątrz pętli występuje warunek niezależny od zmiennej sterującej: Rozszczepianie f o r i := 1 t o nmax do i f dodawanie=true t h e n a := a + n else a := a − n ; Rozszczepianie - poprawka i f dodawanie=true t h e n f o r i := 1 t o nmax do a := a + n else f o r i := 1 t o nmax do a := a − n ; Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Rozwijanie pętli - zwiększenie kroku pętli zmniejszające liczbę sprawdzeń warunku: Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Rozwijanie pętli - zwiększenie kroku pętli zmniejszające liczbę sprawdzeń warunku: Rozwijanie pętli i :=0; w h i l e ( i < 3 0 0 ) do begin a [ i ] := 0 ; i := i + 1 ; end ; Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Rozwijanie pętli - zwiększenie kroku pętli zmniejszające liczbę sprawdzeń warunku: Rozwijanie pętli i :=0; w h i l e ( i < 3 0 0 ) do begin a [ i ] := 0 ; i := i + 1 ; end ; Rozwijanie pętli - poprawka i :=0; w h i l e ( i < 3 0 0 ) do begin a [ i ] := 0 ; a [ i +1] := 0 ; a [ i +2] := 0 ; i := i + 3 ; end ; Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Łączenie pętli - polega na połączeniu ciał pętli o identycznych ograniczeniach zmiennej sterującej: Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Łączenie pętli - polega na połączeniu ciał pętli o identycznych ograniczeniach zmiennej sterującej: Łączenie pętli f o r i := 1 t o 100 do t [ i ]:=0; f o r i := 1 t o 100 do w [ i ]:=0; Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Łączenie pętli - polega na połączeniu ciał pętli o identycznych ograniczeniach zmiennej sterującej: Łączenie pętli f o r i := 1 t o 100 do t [ i ]:=0; f o r i := 1 t o 100 do w [ i ]:=0; Łączenie pętli - poprawka f o r i := 1 t o 100 do begin t [ i ]:=0; w [ i ]:=0; end ; Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Reorganizacja pętli - pętle zewnętrzne powinny być powtarzane możliwie najmniej razy: Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Reorganizacja pętli - pętle zewnętrzne powinny być powtarzane możliwie najmniej razy: Reorganizacja pętli (startów: 2101, zamknięć: 12100) f o r i := 1 t o 100 do { s t a r t 1 r a z } f o r j := 1 t o 20 do { s t a r t 100 r a z y } f o r z := 1 t o 5 do { s t a r t 2000 r a z y } t [i , j , z ]:=0; { z a m k n i ę c i e 10000 r a z y } { z a m k n i e c i e d l a j 2000 r a z y } { z a m k n i e c i e d l a i 100 r a z y } Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Reorganizacja pętli - pętle zewnętrzne powinny być powtarzane możliwie najmniej razy: Reorganizacja pętli (startów: 2101, zamknięć: 12100) f o r i := 1 t o 100 do { s t a r t 1 r a z } f o r j := 1 t o 20 do { s t a r t 100 r a z y } f o r z := 1 t o 5 do { s t a r t 2000 r a z y } t [i , j , z ]:=0; { z a m k n i ę c i e 10000 r a z y } { z a m k n i e c i e d l a j 2000 r a z y } { z a m k n i e c i e d l a i 100 r a z y } Reorganizacja pętli - popr. (startów: 106, zamkn.: 10105) f o r z := 1 to 5 do {start 1 raz} f o r j := 1 to 20 do {start 5 razy} f o r i := 1 to 100 do {start 100 razy} t [i , j , z ]:=0; {zamknięcie 10000 razy} {zamkniecie dla j 100 razy} {zamkniecie dla z 5 razy} Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów PHP - reorganizacja pętli <?php i n c l u d e ( ’ p o m i a r . php ’ ) ; pomiar_start ( ) ; f o r ( $i= 1 ; $i <=1000; $i++) f o r ( $j =1; $j <=200;$j++) f o r ( $z =1; $z<=5;$z++) $t [ i ] [ j ] [ z ] = 0 ; pomiar_stop ( ’ W a r i a n t 1 − d u z e p r z e b i e g i w zewn . pomiar_start ( ) ; f o r ( $z =1; $z<=5;$z++) f o r ( $j =1; $j <=200;$j++) f o r ( $i= 1 ; $i <=1000; $i++) $t [ i ] [ j ] [ z ] = 0 ; pomiar_stop ( ’ W a r i a n t 2 − male p r z e b i e g i w zewn . ?> Zdzisław Sroczyński petli ’) ; petli ’) ; Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Optymalizacja instrukcji warunkowych: Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Optymalizacja instrukcji warunkowych: dla rozłącznych warunków użycie członu else Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Optymalizacja instrukcji warunkowych: dla rozłącznych warunków użycie członu else dla translatora sprawdzającego warunki złożone tylko do momentu, w którym znana jest wartość wyrażenia: Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Optymalizacja instrukcji warunkowych: dla rozłącznych warunków użycie członu else dla translatora sprawdzającego warunki złożone tylko do momentu, w którym znana jest wartość wyrażenia: – dla operatora oraz/and najpierw człony zwykle fałszywe Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Optymalizacja instrukcji warunkowych: dla rozłącznych warunków użycie członu else dla translatora sprawdzającego warunki złożone tylko do momentu, w którym znana jest wartość wyrażenia: – dla operatora oraz/and najpierw człony zwykle fałszywe – dla operatora lub/or najpierw człony zwykle prawdziwe Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Optymalizacja instrukcji warunkowych: dla rozłącznych warunków użycie członu else dla translatora sprawdzającego warunki złożone tylko do momentu, w którym znana jest wartość wyrażenia: – dla operatora oraz/and najpierw człony zwykle fałszywe – dla operatora lub/or najpierw człony zwykle prawdziwe Optymalizacja instrukcji warunkowych i f x = 1 t h e n p1 ; i f x = 2 t h e n p2 ; i f x = 2 t h e n p3 ; Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Optymalizacja instrukcji warunkowych: dla rozłącznych warunków użycie członu else dla translatora sprawdzającego warunki złożone tylko do momentu, w którym znana jest wartość wyrażenia: – dla operatora oraz/and najpierw człony zwykle fałszywe – dla operatora lub/or najpierw człony zwykle prawdziwe Optymalizacja instrukcji warunkowych i f x = 1 t h e n p1 ; i f x = 2 t h e n p2 ; i f x = 2 t h e n p3 ; Optymalizacja instrukcji warunkowych - poprawka i f x = 1 t h e n p1 else i f x = 2 t h e n p2 else i f x = 2 t h e n p3 ; Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Odwołania do elementów tablic – podstawienie pod zmienną prostą wielokrotnie wykorzystywanego elementu tablicy: Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Odwołania do elementów tablic – podstawienie pod zmienną prostą wielokrotnie wykorzystywanego elementu tablicy: Odwołania do elementów tablic x := t [ i ] + t [ i ] + t [ i ] ; f o r i := 1 t o 100 do t [ i ] := w [ k + 2 * j ] ; Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Odwołania do elementów tablic – podstawienie pod zmienną prostą wielokrotnie wykorzystywanego elementu tablicy: Odwołania do elementów tablic x := t [ i ] + t [ i ] + t [ i ] ; f o r i := 1 t o 100 do t [ i ] := w [ k + 2 * j ] ; Odwołania do elementów tablic - poprawka p i := t [ i ] ; x := p i + p i + p i ; wp := w [ k + 2 * j ] ; f o r i := 1 t o 100 do t [ i ] := wp ; Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Odwołania do pól rekordów/struktur/obiektów – duża zależność od translatora. Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Odwołania do pól rekordów/struktur/obiektów – duża zależność od translatora. ▶ Rozwijanie funkcji – umieszczenie ciała funkcji w miejsce jej wywołania (jeśli wywoływanie następuje w niewielu miejscach). Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Odwołania do pól rekordów/struktur/obiektów – duża zależność od translatora. ▶ Rozwijanie funkcji – umieszczenie ciała funkcji w miejsce jej wywołania (jeśli wywoływanie następuje w niewielu miejscach). ▶ Optymalizacje translatora – optymalizacja kodu w opcjach kompilatora, konieczność ponownego testowania po włączeniu optymalizacji. Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ Odwołania do pól rekordów/struktur/obiektów – duża zależność od translatora. ▶ Rozwijanie funkcji – umieszczenie ciała funkcji w miejsce jej wywołania (jeśli wywoływanie następuje w niewielu miejscach). ▶ Optymalizacje translatora – optymalizacja kodu w opcjach kompilatora, konieczność ponownego testowania po włączeniu optymalizacji. ▶ Negatywny wpływ na przejrzystość kodu – niektóre z optymalizacji. Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ operacje wejścia-wyjścia (dla języków skryptowych, webowych - np. PHP) Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ operacje wejścia-wyjścia (dla języków skryptowych, webowych - np. PHP) PHP - różne metody przetwarzania tekstu <?php i n c l u d e ( ’ p o m i a r . php ’ ) ; pomiar_start ( ) ; $tab=a r r a y ( ) ; f o r ( $i =0; $i <100000; $i++) $tab [ ] = ” Z a w a r t o ś ć z m i e n n e j $ i <b r />” ; pomiar_stop ( ’ W a r i a n t 1 − C u d z y s ł o w y ’ ) ; pomiar_start ( ) ; $tab=a r r a y ( ) ; f o r ( $i =0; $i <100000; $i++) $tab [ ] = ’ Z a w a r t o ś ć z m i e n n e j pomiar_stop ( ’ W a r i a n t 2 − A p o s t r o f y ’ ) ; ’ . $i . ’ <b r /> ’ ; ?> Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów PHP - funkcje wyjściowe dla tekstów <?php i n c l u d e ( ’ p o m i a r . php ’ ) ; pomiar_start ( ) ; ob start () ; f o r ( $i =0; $i <100000; $i++) p r i n t f ( ’ Z a w a r t o ś ć z m i e n n e j ob clean () ; pomiar_stop ( ’ W a r i a n t 1 − p r i n t f ’ ) ; pomiar_start ( ) ; ob start () ; f o r ( $i =0; $i <100000; $i++) p r i n t ( ’ Z a w a r t o ś ć z m i e n n e j ob clean () ; pomiar_stop ( ’ W a r i a n t 2 − p r i n t ’ ) ; pomiar_start ( ) ; ob start () ; f o r ( $i =0; $i <100000; $i++) echo ( ’ Z a w a r t o ś ć z m i e n n e j ob clean () ; pomiar_stop ( ’ W a r i a n t 3 − e c h o ’ ) ; ’ . $i . ’ <b r /> ’ ) ; ’ . $i . ’ <b r /> ’ ) ; ’ . $i . ’ <b r /> ’ ) ; ?> Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ buforowanie operacji we/wy, mapowanie plików w pamięci operacyjnej Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ buforowanie operacji we/wy, mapowanie plików w pamięci operacyjnej ▶ narzut wprowadzany przez system operacyjny/inne oprogramowanie (np. antywirusowe) Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ buforowanie operacji we/wy, mapowanie plików w pamięci operacyjnej ▶ narzut wprowadzany przez system operacyjny/inne oprogramowanie (np. antywirusowe) ▶ obciążenie wynikające z wielozadaniowości i wielodostępu – wpływ niedeterministyczny Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ buforowanie operacji we/wy, mapowanie plików w pamięci operacyjnej ▶ narzut wprowadzany przez system operacyjny/inne oprogramowanie (np. antywirusowe) ▶ obciążenie wynikające z wielozadaniowości i wielodostępu – wpływ niedeterministyczny ▶ działanie pamięci wirtualnej i dynamicznej gospodarki pamięcią (odśmiecacz - garbage collector w C#, Java) Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ buforowanie operacji we/wy, mapowanie plików w pamięci operacyjnej ▶ narzut wprowadzany przez system operacyjny/inne oprogramowanie (np. antywirusowe) ▶ obciążenie wynikające z wielozadaniowości i wielodostępu – wpływ niedeterministyczny ▶ działanie pamięci wirtualnej i dynamicznej gospodarki pamięcią (odśmiecacz - garbage collector w C#, Java) Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ listy wbudowane w bibliotekę standardową ArrayList Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ listy wbudowane w bibliotekę standardową ArrayList ▶ listy oparte na Generykach (Templates) List<T> Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ listy wbudowane w bibliotekę standardową ArrayList ▶ listy oparte na Generykach (Templates) List<T> ▶ tablice zmiennych prostych Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ listy wbudowane w bibliotekę standardową ArrayList ▶ listy oparte na Generykach (Templates) List<T> ▶ tablice zmiennych prostych ▶ tablice dynamiczne (o ile istnieją w danym języku) Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ listy wbudowane w bibliotekę standardową ArrayList ▶ listy oparte na Generykach (Templates) List<T> ▶ tablice zmiennych prostych ▶ tablice dynamiczne (o ile istnieją w danym języku) ▶ inne specyficzne typy danych (np. Variant, typy anonimowe var) Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów ▶ listy wbudowane w bibliotekę standardową ArrayList ▶ listy oparte na Generykach (Templates) List<T> ▶ tablice zmiennych prostych ▶ tablice dynamiczne (o ile istnieją w danym języku) ▶ inne specyficzne typy danych (np. Variant, typy anonimowe var) Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów Wprowadzenie Wybór kodu do optymalizacji Przykłady optymalizacji czasowej Pozostałe czynniki uboczne warunkujące wydajność programów Dziękuję za uwagę Następny temat: optymalizacja pamięciowa programów Zdzisław Sroczyński Inżynieria oprogramowania: optymalizacja czasowa programów