In qualcosa di semplice come
int sq(int x) { int y = x*x; return y; }
vs
int sq(int x) { return (x*x); }
la funzione precedente richiede un passaggio IL aggiuntivo.
EDIT: codice IL del primo esempio, utilizzando il compilatore C # corrente da VS 2013 Update 4 (.NET Framework 4.5.1), codice dalla versione di versione ottimizzata:
IL_0000: ldarg.0
IL_0001: ldarg.0
IL_0002: mul
IL_0003: stloc.0 // These two instructions
IL_0004: ldloc.0 // seem to be unneccessary
IL_0005: ret
e dal secondo esempio:
IL_0000: ldarg.0
IL_0001: ldarg.0
IL_0002: mul
IL_0003: ret
Quel passo aggiuntivo di IL è indicativo di dati copiati in memoria? Questa differenza è ancora presente quando si utilizza qualcosa apparentemente meglio ottimizzato? (C?)
Se si prima o entrambi: posso usare quest'ultimo, specialmente quando i dati restituiti richiedono molto spazio e presumibilmente un sacco di tempo da spostare in memoria? O dovrei favorire il primo, perché è più leggibile? LINQ semplifica l'uso di intere funzioni all'interno di una linea long return (), ma il mio esempio si trova di fronte alla stessa scelta: C. Velocità o leggibilità?
In generale, inseriresti l'ultimo bit di matematica tra parentesi nella linea di ritorno?