2015-10-18 6 views
5

Stavo rivedendo del codice C# e ho trovato alcune variabili che erano circoscritte al livello di funzione che avrei esaminato all'interno del blocco di codice (un ciclo in questo caso) dove sono utilizzati. Per me, lo scoping più vicino è semplicemente più pulito e più facile da ragionare e questo è un motivo sufficiente per preferire l'ambito a livello di blocco. Ma mi stavo chiedendo, c'è un impatto significativo sulle prestazioni in un modo o nell'altro?Esiste un impatto sulle prestazioni a livello di blocco rispetto all'ambito del livello della funzione in .NET

+0

avria dipende dalle dimensioni del loop e variabili - in molti casi probabilmente non differance –

+0

correlati http://programmers.stackexchange.com/questions/113262/why-declare-variables-close-to-where-they-are-used – Rotem

+0

@AlexKrups Lo farebbe? Immagino che il compilatore solleverebbe la dichiarazione dal ciclo in ogni caso. – Rotem

risposta

8

Non c'è alcuna differenza di prestazioni.

L'ambito variabile è diverso dalla durata della variabile. La variabile viene creata nello stack frame per la funzione, indipendentemente dal fatto che sia dichiarata nell'ambito della funzione o in un blocco di codice nella funzione. La variabile esiste durante l'intera esecuzione della funzione, è solo il compilatore che limita l'accesso alla variabile a seconda del suo ambito.

(Si noti però che le regole differenti si applicano se la variabile è in realtà una parte di una chiusura al posto di una variabile locale regolare.)

+0

E ovviamente il JITter è libero di riutilizzare un registro o parte dello stack per più variabili con tempi di live non sovrapposti. – CodesInChaos

+0

Questo è il modo in cui ho immaginato, anche se avevo pensato che forse la differenza nella definizione dell'ambito potrebbe avere effetto sulla garbage collection. –

+0

@MatthewNichols: In realtà non ha alcun effetto sulla garbage collection (tranne in modalità debug). Il garbage collector si preoccupa solo di dove nel codice viene utilizzato il riferimento, l'ambito e la durata della variabile è irrilevante. – Guffa