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.
Zastosowanie standardowe
Oprogramowane optymalnie
Opis
i:= 1;…
if (i = 1) then i:=2 else 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
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;
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
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
b:= x*i;
Repeat
zrob_cos;
until keypressed;
if naprawde_trzeba then zrob_cos;
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
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ć
...
Slayer413