Optymalizacja programu.docx

(18 KB) Pobierz

Optymalizacja programu

 

Aby Twoje programy działały naprawdę szybko, powinienneś stosować pewne zasady, które pozwolą Ci robić to samo, ale szybciej. Zobacz kilka konkretnych przykładów jak możesz zoptymalizować swoje kody źródłowe.

 

Uwaga, podane zasady dotyczą również innych języków programowania, np. C++. Niektóre z nich pozwalają efektywniej programować w php i java script.

 

Warunki


 

Zastosowanie standardowe

Oprogramowane optymalnie

Opis

i:= 1;

 

if (i = 1) then i:=2 else i:=1;

 

i:= 1;

 

i := 3 – i;

 

Zamiast stosować warunek, może wystarczy odpowiednie działanie matematyczne

i:= i + 1; if (i>=10) then i:= 0;

i:= (i + 1) mod 10;

 

To raczej przykład skrótu zapisu. Warto wykorzystywać resztę z dzielenia do niektórych obliczeń

 

if (s = 'napis') and (i = 0) then

 

if (i=0) and (s = 'napis')

 

Na początku warunku korzystaj z takich wyrażeń, których sprawdzenie jest szybsze. Gdy i będzie inne niż 0, możesz zaoszczędzić czas. Szczególnie ważne przy korzystaniu z czasochłonnych funkcji

 

if b = true then

if b then

Jeśli b jest boolean, po co go jeszcze porównywać z true?

 

if b = true then a:= 10 else a:=0;

a:= integer(b) * 10;

Rzutowanie wartości true na integer daje 1, gdy false 0, jak pomnożysz, otrzymasz wynik bez warunku

 

Procedury i funkcje




 

Zastosowanie standardowe

Oprogramowane optymalnie

Opis

procedure nazwa(s : string);

procedure nazwa(const s : string);

 

lub

procedure nazwa(var s : string);

Zamiast 256 bajtów napisu kopiowanych do procedury, zostanie przesłane tylko 4 bajty -adres napisu w pamięci (zastosowanie daje pewne ograniczenia -tylko do odczytu, lub do zapisu na oryginale)

a:= funkcja(b);

c:= funkcja(b) * 4;

a:= funkcja(b);

 

c:= a * 4;

 

Jeśli to tylko możliwe, nie wywołuj wiele razy tej samej funkcji. Zapamiętaj jej wartość i korzystaj z zapamiętanej kopii

 

Pętle

 

 

Zastosowanie standardowe

 

Oprogramowane optymalnie

 

Opis

 

for i:=1 to x*y do

 

Ilosc:= x * y;

 

for i:=1 to Ilosc do

 

Jeśli możesz zrobić coś przed pętlą, zrób to. W pętli używaj tego co naprawdę trzeba

 

A:= 10;

 

for i:=1 to 100 do

 

begin

 

x := 4 *a;

 

b := x * i;

 

end;

 

A:=10;

 

x:= 4*a;

 

for i := 1 to 100 do

 

begin

 

b:= x*i;

 

end;

 

Repeat

 

zrob_cos;

 

until keypressed;

Repeat

 

if naprawde_trzeba then zrob_cos;

 

until keypressed;

 

 

 

Operacje matematyczne

 

Zastosowanie standardowe

Oprogramowane optymalnie

Opis

i:= i + 1;

Inc(i);

W assemblerze Inc jest szybsze niż Add, stąd przy naprawdę dużym obciążeniu Inc zajmie mniej taktów procesora

a := b div 2;

a := b shr 1;

w c++

 

a = b >> 1;

Dzielenie liczb całkowitych przez potęgi dwójki, można zapisać przesunięciem bitowym. Jest znacznie szybsze.

a := y * 640 + x;

a := (y shl 7) + (y shl 9) + x;

Inaczej y * 512 + y * 128 + x to to samo co y * 640 + x, jednak znacznie szybsze. Stosowane przy tworzeniu szybkich operacji graficznych

R: Real;

{$N+}

R : Single;

 

{$N+} Dotyczy pascala. Użycie dyrektywy {$N+} i stosowanie single zamiast real pozwala na wykonywanie szybszych operacji zmiennoprzecinkowych

 

Optymalizacja programu

 

Zastosowanie standardowe

Oprogramowane optymalnie

Opis

 

SELECT * FROM tabela

SELECT pole1, pole2 FROM tabela

MySQL: Jeśli nie potrzebujesz wszystkich danych, to po co je przesyłać? To może znacznie przyspieszyć

...

Zgłoś jeśli naruszono regulamin