nel secolo scorso, sviluppai un'applicazione in C che,
leggendo dal db generava una matrice di valori
applicava un algoritmo matematico
infine memorizzava il risultato


i pc, significativamente lenti per le caratteristiche del tempo,
presentavano tempi di esecuzione gravosi


nella necessità di ridurre i 48 secondi, causati da 225 letture al db (singole select),
decisi di usare delle select con join di tabelle, come unica azione che mi era possibile


fui costretto a modificare delle sub aumentando di 200 linee il programma
da 1500 righe a 1700, ma così facendo ridussi a 9 le letture al db (select in join)


il beneficio fu evidente, ottenendo un tempo di preparazione della matrice di 14 secondi


per l'analisi dell'eseguibile usai PLIST un tool di Microsoft, di cui riporto il risultato


questa analisi é stata la via che ho seguito nel tempo, cercando di ridurre gli accessi al db
anche a costo di creare query con join complesse


ovviamente, tutte le analisi dell'exe sono state fatte a pc riavviato ogni volta,
le tabelle erano ben indicizzate e l'indicizzazione non é mai stata modificata durante le analisi

codice:
FR12 -- Vers. 03.1 ------------------------------


tempo di preparazione    :  48 sec
tempo di calcolo         :  0 sec
tempo di memor.risultato :  5 sec
tempo totale di elab.ne  :  53 sec


FINE DEL PROGRAMMA




Microsoft PLIST Version 1.00
Profile: Function timing, sorted by time.
Program Statistics
Total time: 57542.664 milliseconds
Time outside of functions: 179.013 milliseconds
Call depth: 8
Total functions: 29
Total hits: 664
Function coverage: 79.3%
Module Statistics for fr12.exe
Time in module: 57363.651 milliseconds
Percent of time in module: 100.0%
Functions in module: 29
Hits in module: 664
Module function coverage: 79.3%


     Func         Func+Child            Hit
     Time      %        Time       %  count    Function


37687.180   65.7   37687.180    65.7	225    sub_comp_for_2       (fr12o.c:892)
 6864.491   12.0    6864.491    12.0     25    sub_comp_for_3       (fr12o.c:926)
 3338.205    5.8    3340.597     5.8     25    sub_upd_comp         (fr12o.c:1361)
 3067.577    5.3   51004.538    88.9     10    sub_comp_for         (fr12o.c:816)
 1427.693    2.5   50287.469    87.7      2    sub_car_for          (fr12o.c:709)
 1045.403    1.8    1405.170     2.4      1    sub_calcolo          (fr12o.c:1090)
....




FR12 -- Vers. 03.2 ------------------------------


tempo di preparazione    :  14 sec
tempo di calcolo         :  0 sec
tempo di memor.risultato :  3 sec
tempo totale di elab.ne  :  17 sec


FINE DEL PROGRAMMA 




Microsoft PLIST Version 1.00
Profile: Function timing, sorted by time.
Program Statistics
Total time: 19592.594 milliseconds
Time outside of functions: 399.423 milliseconds
Call depth: 10
Total functions: 33
Total hits: 478
Function coverage:  78.8%
Module Statistics for fr12.exe
Time in module: 19193.171 milliseconds
Percent of time in module: 100.0%
Functions in module: 33
Hits in module: 478
Module function coverage: 78.8%


     Func         Func+Child            Hit
     Time      %        Time       %  count    Function


 7258.117   37.8   13607.582    70.9      9    sub_comp_for_a  (fr12.c:922)
 4032.109   21.0    4032.109    21.0     47    sub_upd_comp_1  (fr12.c:1534)
 3772.645   19.7    6312.133    32.9     25    sub_comp_for_3  (fr12.c:1074)
  694.260    3.6   14304.358    74.5      9    sub_car_for_1   (fr12.c:860)
....