CAPITOLO 12

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.

G3.gif (414 byte)

DOWNLOAD THIS PROJECT

 

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