Devo spostare invariato fuori dal ciclo

5

Dovrei preoccuparmi di spostare gli invarianti dall'ambito del ciclo se peggiora la leggibilità del codice?

Diamo un'occhiata a un semplice esempio:

for (var i = 0; i < collection.Count; i++)
{
   ...
}

vs.

var collectionCount = collection.Count;
for (var i = 0; i < collectionCount; i++)
{
   ...
}

La performance del secondo pezzo di codice è migliore o uguale alla prima. Sarà uguale solo se la raccolta è fissa e il conteggio non viene calcolato ogni volta. Sarà molto meglio se, per esempio, la raccolta è una lista collegata che non memorizza nella cache la sua lunghezza.

Comprendo che il secondo approccio difficilmente ucciderà le prestazioni delle mie applicazioni (è molto più probabile che si verifichi una query SQL inefficiente) ma allo stesso tempo non mi sento a mio agio quando scrivo il secondo pezzo di codice manco (piccolo) ottimizzazione. Ma allo stesso tempo dal punto di vista della leggibilità mi piace il primo pezzo di codice in più (meno righe di codice, meno variabili).

Suppongo che sia una cosa da poco, e forse non vale la pena discuterne, ma mi piacerebbe sentire la tua opinione.

    
posta SiberianGuy 13.10.2011 - 09:59
fonte

1 risposta

13

Quasi sempre la risposta a questo genere di cose è di lasciarlo al compilatore. Ti consiglierei di scrivere il codice più leggibile e manutenibile che puoi e non ti preoccupare di questo tipo di micro-ottimizzazione. I compilatori moderni sono più che capaci di fare questo tipo di ottimizzazione da soli.

Se e solo se arrivi al punto in cui devi eseguire il codice più velocemente, quindi profila il codice, osservando il più possibile il sistema e poi decidi dove iniziare a provare per ottimizzare. Solitamente troverai che l'80% del tempo è trascorso in una piccola parte del codice, e questo costituirà un punto naturale da ottimizzare.

    
risposta data 13.10.2011 - 10:10
fonte

Leggi altre domande sui tag