Ho letto diversi articoli e domande/risposte che concludono che la pratica migliore è lasciare che il compilatore JIT esegua tutte le ottimizzazioni per le chiamate di funzione in linea. Ha senso.Il compilatore JIT ottimizza le dichiarazioni di variabili non necessarie (in linea)?
E le dichiarazioni di variabili in linea? Il compilatore ottimizza anche questi?
Cioè, sarà questo:
Dim h = (a + b + c)/2 'Half-Perimeter
If maxEdgeLength/(Math.Sqrt(h * (h - a) * (h - b) * (h - c))/h) <= MaximumTriangleAspectRatio Then
'Do stuff here.
End If
avere prestazioni migliori di questo:
Dim perimeter = a + b + c 'Perimeter
Dim h = perimeter/2 'Half-Perimeter
Dim area = Math.Sqrt(h * (h - a) * (h - b) * (h - c)) 'Heron's forumula.
Dim inradius = area/h
Dim aspectRatio = maxEdgeLength/inradius
If aspectRatio <= MaximumTriangleAspectRatio Then
'Do stuff here.
End If
Naturalmente io preferisco il secondo perché è più facile da leggere e correggere, ma non possono permettersi il degrado delle prestazioni, se esiste.
Nota: ho già identificato questo codice come collo di bottiglia: non c'è bisogno di risposte sull'ottimizzazione prematura. :-)
Non puoi permetterti 20 byte extra di RAM?È molto improbabile che ciò provochi le prestazioni della tua app, specialmente se questo codice viene eseguito più e più volte ogni volta sono gli stessi 20 byte. –
Non sarebbe il compilatore (non il JIT!) Sarebbe "responsabile" per questo tipo di ottimizzazione durante la traduzione in MSIL? (E se, quindi, in che misura il compilatore MS C# si ottimizza.) In ogni caso * lo confrontiamo in un ambiente relativistico * in quanto è l'unico modo per "sapere per certo" che è più veloce e in che misura. –
Sei l'unica persona qui che può rispondere alla domanda. Hai scritto il codice in entrambi i modi. Eseguilo in entrambe le direzioni, misura i tempi e poi saprai quale è più veloce. Ciò che il jitter fa o non fa è irrilevante; sapere cosa fa il jitter in nessun modo risponde alla domanda "quale è più veloce?" –