In genere nella maggior parte dei casi si tratterà di funzioni più scarse, non delle funzioni chiamate più spesso un miliardo di volte in un ciclo.
Quando si esegue la profilazione basata su campioni (con uno strumento o manualmente), spesso i punti di crisi più grandi si troveranno in chiamate a foglia minuscole che fanno cose semplici, come una funzione per confrontare due numeri interi.
Questa funzione spesso non trarrà beneficio da un'ottimizzazione molto elevata. Per lo meno quei punti caldi granulari raramente hanno la massima priorità. È la funzione che chiama quella funzione foglia che potrebbe essere il creatore di problemi, o la funzione che chiama la funzione che chiama la funzione, come un algoritmo di ordinamento non ottimale. Con buoni strumenti puoi eseguire il drill-down dalla chiamata al chiamante e anche vedere chi passa più tempo a chiamare la chiamata.
Spesso è un errore ossessionare i callees e non guardare i chiamanti lungo il grafico delle chiamate in una sessione di profilazione a meno che non si stiano facendo cose in modo molto inefficiente a livello micro. Altrimenti potresti sudare eccessivamente le piccole cose e perdere di vista il quadro generale. Solo avere un profiler in mano non ti protegge dall'ossessione per cose banali. È solo un primo passo nella giusta direzione.
Inoltre, devi assicurarti di eseguire operazioni di profilatura in linea con le cose che gli utenti vogliono effettivamente fare, altrimenti essere totalmente disciplinati e scientifici nelle misurazioni e nei benchmark è inutile poiché non si allinea con ciò che i clienti fanno con il prodotto. Una volta ho avuto un collega che ha messo a punto un algoritmo di suddivisione per suddividere un cubo in un miliardo di sfaccettature e ne era molto orgoglioso .... tranne per il fatto che gli utenti non suddividono semplici cubi di 6 poligoni in un miliardo sfaccettature. Il tutto rallentò fino a gattonare quando provò a correre su un modello di auto di produzione con oltre 100.000 poligoni da suddividere, a quel punto non riuscì nemmeno a fare 2 o 3 livelli di suddivisione senza rallentare a gattonare. In parole povere, ha scritto un codice che era super ottimizzato per input di dimensioni non irrealistiche che non
Devi ottimizzare i casi d'uso reali allineati con gli interessi dei tuoi utenti, altrimenti è peggio che inutile, dal momento che tutte quelle ottimizzazioni che tendono almeno a degradare in qualche modo la manutenibilità del codice hanno pochi vantaggi per l'utente e solo tutti quei negativi per la base di codice.