|
|
 |
 |
 |
Artykuły |
 |
|
Optymalizacja kodu
22:38:35 29.05.2005
@Gujet
Witam,
Dziś będzie o optymalizacji kodu słów kilka. Ktoś zapyta: „Co to w ogóle jest ta optymalizacja?”. Otóż każdy program da się napisać lepiej lub gorzej, a prędkość i sprawność jego działania zależy w bardzo dużym stopniu od programisty. Optymalizacja, to poprawienie danego algorytmu tak, by działał szybciej i sprawniej, bądź napisanie zupełnie nowego kodu, który swoje zadanie wykona lepiej od poprzednika.
Czy da się optymalizować w nieskończoność? Oczywiście nie. W pewnym momencie każdy dojdzie do wniosku, że nic tu się nie da już poprawić (albo przynajmniej on nie wie, co się da:)).
Ktoś powie, że „on to robi proste programy i jemu ta cała optymalizacja nie jest potrzebna”. Oczywiście, ale optymalizując kod uczymy się dobrych nawyków na przyszłość – kiedy to będziemy pisać bardziej rozbudowane aplikacje/gry. Poza tym, im program sprawniej i szybciej działa, tym lepiej świadczy to o jego twórcy. A o to przecież chodzi! Zacznijmy więc od prostego przykładu:
Var x,y,z:double;
i:integer;
Begin
For i:=0 to 100 do
begin
x:=i*(sin(y)*sin(y)+cos(z)*cos(z));
i:=i+1;
end;
End;
Co tu da się poprawić? Ano to, że w pętli za każdym razem liczony jest czynnik (sin(y)*sin(y)+cos(z)*cos(z)), który nie jest zależny od i, a zmienne „biorące udział” w liczeniu owego czynnika (y,z) nie ulegają zmianie w czasie pętli. Jak to zoptymalizować? Otóż ów czynnik należy obliczyć przed pętlą.
Var z,y,z,czynnik:double;
i:integer;
Begin
czynnik:= sin(y)*sin(y)+cos(z)*cos(z);
For i:=0 to 100 do
begin
x:=i*czynnik;
i:=i+1;
end;
End;
Jak widzisz, wymagało to wprowadzenie dodatkowej zmiennej, co z kolei zwiększyło pamięciożerność programu o 8 bajtów, bo tyle zabiera typ double. I w takim przypadku należy wybrać, czy chcesz by program działał szybciej, czy pochłaniał mniej pamięci. W małych programach zwiększenie pamięciożerności nie stwarza problemów, ale np. w grach liczy się każdy bajt:)
Skoro już jestem przy pamięci, to wspomnę o tym, że należy umiejętnie dobierać typy zmiennych. Na przykład: prędkość samochodu – ustalamy, że nie będzie przekraczała 255km/h. Deklarujemy więc zmienną speed typu byte, który w pamięci zajmuje tylko 1 bajt. Ktoś niedoświadczony zadeklarowałby typ integer, który zżera jakieś 4 bajty. To samo tyczy się łańcuchów znaków. Na przykład: imię gracza – ustalamy, że nie może przekraczać dziesięciu znaków (imie:string[10];) i gotowe. Jeśli nie okreslimy rozmiaru stringa, to będzie on ograniczony jedynie pamięcią komputera. A tak będzie zajmował tyle bajtów, ile znaków.
Pełną listę typów danych znajdziesz w indeksie pomocy Delphi pod hasłem: „Types, clasificattion”.
Gujet (gujet@o2.pl)
Komentarzy: 0 | Głosuj (1,
2,
3,
4,
5,
6) | Ocena: 3.4 | Czytane: 2155 |  |
 |
Komentarze |
 |
|
Musisz się zalogować aby mieć możliwość komentowania
|  |
|
 |
|