L'OTTIMIZZAZIONE DEL CODICE
ATTENZIONE: CAPITOLO E CODICE NON INTERAMENTE COMPLETATO...
Sebbene la velocità dei processori del giorno d'oggi e la quantità di Hard Disk
disponibile nei PC sia aumentata in maniera esponenziale una delle tappe fondamentali per
il programmatore resta l'ottimizzazione del proprio codice. In questo capitolo si
studieranno dei semplici metodi per rendere più efficiente la velocità dei propri
programmi.
In generale i fattori da ottimizzare in un programma restano 4: la velocità di
visualizzazione, reale, apparente e l'utilizzo di risorse. E' buona norma ottimizzare un
programma durante la sua creazione e non a lavoro ultimato.
In questo capitolo si userà un progetto da me creato per spiegare i possibili
miglioramenti di un programma.
VELOCITA' REALE
Con velocità reale si intende la velocità intrinseca del programma compilato e che
quindi non è ulteriormente migliorabile... Come fare ad ottimizzare una routine? Il
trucco sta nell'utilizzare tipi che il sistema operativo e il compilatore gestisce con
maggior facilità, ad esempio in Windows 3.1 i tipi numerici a 16-bit erano i più veloci,
in Windows '95 e Windows NT gli interi a 32-bit sono al contrario i più rapidi, nel
Pascal il tipo Integer era (fino alla versione di Delphi 1.0) a 16-bit, nelle versioni a
32-bit di Delphi (2.X e 3.X) con Integer si intende un intero a 32-bit.
Nella sezione "confronto di tipi" del progetto in esame verranno confrontati i
tipi SmallInt, Integer, Variant e Real. E' interessante osservare come il tipi Variant sia
notevolmente più lento degli altri, questo perchè una variabile Variant può contenere
sia dati interi che mobili (Integer e Real), ma anche Stringhe o Currency.
Potrebbe sembrare vantaggioso usare sempre tipi Variant, ma vi renderete conto che una
lentezza superiore di 80 volte può seccare piuttosto l'utente, anche perchè è semplice
convertire dati da stringhe a numeri tramite funzioni del tipo STRtoINT o INTtoSTR :-D
Nel test anche il tipo Real appare decisamente lento, in effetti se possibile è
consigliabile svolgere calcoli in Integer e converire solo quando necessario in dati
reali.
VELOCITA' DI STRINGHE
In Object Pascal non esiste alcun modo per rendere più veloce il tipi String, tuttavia
nel progetto Optimize è mostrato un piccolo stratagemma per velocizzare operazioni di
stringhe: quando si deve eseguire la stessa funzione con determinate stringhe (ad esempio
un concatenamento, S:= S1 + S2 ie.) all'interno di un ciclo è preferibile costruire il
valore all'esterno del ciclo, la performance del programma crescerà in maniera
insperata...
OTTIMIZZAZIONE DEL CODICE
Per la serie le pecche del RAD... Ragazzi mettetevi in testa una cosa, in Delphi sarà
pure semplice programmare ma il risultato è notevolmente più lento del codice non RAD.
Perchè ci dici ciò? Semplice perchè con piccoli accorgimenti si può rendere una
routine notevolmente più veloce senza scrivere tanto codice. Siete scettici?
Facciamo un esempio: l'accesso di una proprietà è più lento rispetto all'uso di una
variabile di 50 volte, se intendiamo usare in un ciclo una determinata proprietà che
resta invariata basterà quindi salvarla in una variabile temporanea. In fondo in
fondo il codice è lo stesso. Vedere per chiarimenti "ottimizzazione del codice nel
progetto in esame".
VELOCITA' APPARENTE
Sapete perchè vanno tanto di moda le ProgressBar? Perchè migliorano la velocità
apparente (anche a scapito della reale).
Come la Microsoft insegna non si deve fare un programma veloce ma un programma che sembri
veloce, il mostrare un clessidra "avverte" l'utente che deve attendere,
l'avanzamento di una percentuale sullo schermo fa credere all'ignaro utilizzatore che il
programma sta effettivamente svolgendo qualcosa (mentre in realtà potrebbe limitarsi a
resizare le immagini porno interne al soft stesso), l'utilizzo di Thread multipli, a costo
di rendere un programma il corrispondente di una tartaruga digitale, esalta l'utilizzatore
finale (tanto per capirsi se finchè il vostro programma non svolge un tubazzo attivaste
uno Screen Saver di Pamela Anderson l'utente non si renderebbe conto del tempo che passa,
anzi... :P
Se l'esempio non vi da l'impressione di un miglioramento di velocità probabilmente fate
parte della schiera di quelli che necessitano del suddetto Screen Saver :-)
ALGORITMI DI RICERCA