GRAFIKA|banner reklamowy
m m m m m m m m m
(X)HTML/XML [12]
Asembler [0]
ASP/ASP+ [18]
Bazy danych [0]
C/C++/C# [3]
CSS [3]
Delphi [25]
Grafika [2]
Inne [19]
Java [6]
Javascript [4]
Linux [5]
Pascal [18]
PHP [20]
Python [7]
SEO [3]
SSI [1]
Windows [1]

Dodaj artykuł
Dodaj news
GRAFIKA|endramki
Reklama  
sprzątanie warszawa psychiatra warszawa materacowe poduszki ogrody fontanny
GRAFIKA|endramki
Statystyki  
Użytkownicy: 0
Goście: 12
Ukryci: 0
Boty: 0
Wszyscy: 8971

Newsów: 137
Artykułów: 148
GRAFIKA|endramki
GRAFIKA|prztlo
GRAFIKA|gora
GRAFIKA|celewo Artykuły GRAFIKA|ceprawo
GRAFIKA|Artykuł    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
GRAFIKA|dol
GRAFIKA|celewo Komentarze GRAFIKA|ceprawo
Musisz się zalogować aby mieć możliwość komentowania

GRAFIKA|dol
GRAFIKA|prztlo
Nie jesteś zalogowany?
Zaloguj się!
Nie masz konta?
Zarejestruj się!
GRAFIKA|endramki
  Linki
GRAFIKA|endramki
  Reklama
GRAFIKA|endram
Copyright © p-zone.pl