Ciao, questo è qualcosa che mi infastidisce e spero che qualcuno abbia una risposta per me. Ho letto su ref
(e out
) e sto cercando di capire se sto rallentando il mio codice usando ref
s. Comunemente Sostituirò qualcosa di simile:Il costo delle prestazioni per utilizzare ref invece di restituire gli stessi tipi?
int AddToInt(int original, int add){ return original+add; }
con
void AddToInt(ref int original, int add){ original+=add; } // 1st parameter gets the result
perché ai miei occhi questo
AddToInt(ref _value, _add);
è più facile da leggere e il codice di questo
_value = AddToInt(_value, _add);
I so esattamente cosa sto facendo sul co de usando ref
, anziché restituire un valore. Tuttavia, le prestazioni sono qualcosa che prendo sul serio, e apparentemente il dereferenziamento e la pulizia sono molto più lenti quando si usano i ref.
Quello che mi piacerebbe sapere è il motivo per cui ogni post che ho letto dice che c'è molto pochi posti si sarebbe tipicamente passare un ref
(lo so gli esempi sono artificiosa, ma spero che si ottiene l'idea), quando mi sembra che l'esempio ref
sia più piccolo, più pulito e più preciso.
Mi piacerebbe anche sapere perché ref
è davvero più lento di restituire un tipo di valore - a me sembrerebbe, se dovessi modificare molto il valore della funzione prima di restituirlo, che sarebbe più veloce per fare riferimento alla variabile attuale per modificarla in contrasto con un'istanza di quella variabile poco prima che venga pulita dalla memoria.
mi piacerebbe di solito preferisco restituire un valore per ragioni stilistiche, dal momento che mi piace funzioni libere effetti collaterali. – CodesInChaos
Stai cercando di capire il costo delle prestazioni? Chiedi un profiler, non chiedere a noi! – sehe
Il primo caso è più facile da leggere perché hai chiamato il tuo metodo di conseguenza. Qualcosa come '_value = Aggiungi (_valore, _add);' o '_valore = SumOf (_valore, _add);' è più leggibile per me. – nawfal