Duplicar posible:
Is it better to declare a variable inside or outside a loop?¿Es esta "declaración de movimiento más cercana al uso" realmente preferible?
ReSharper quiere que cambie esto:
int Platypus;
string duckBill1;
string duckBill2;
string duckBill3;
. . .
using (OracleDataReader odr = ocmd.ExecuteReader()) {
while (odr.Read()) {
Platypus = odr.GetInt32("Platypus");
duckBill1 = odr.GetString("duckBill1");
duckBill2 = odr.GetString("duckBill2");
duckBill3 = odr.GetString("duckBill3");
switch (Platypus) {
. . .
... a esto:
using (OracleDataReader odr = ocmd.ExecuteReader()) {
while (odr.Read()) {
int Platypus = odr.GetInt32("Platypus");
string duckBill1 = odr.GetString("duckBill1");
string duckBill2 = odr.GetString("duckBill2");
string duckBill3 = odr.GetString("duckBill3");
switch (Platypus) {
. . .
... pero de esta manera (parece, al menos, eso) los vars se declaran N veces, una vez por cada vez a través del ciclo while. ¿La forma Resharperizada es realmente mejor que la original?
Y si los declara fuera del ciclo, su alcance será más amplio, lo que significa que tardará más en liberarse. +1 –
@AndreCalil No, no lo hará, porque el alcance no tiene nada que ver con la elegibilidad para la recolección. El impacto en el rendimiento es nulo, como dice rsbarro. –
@JonHanna Lo siento, no veo dónde están las colecciones en el tema. Si declara una variable en el alcance de un método, no se liberará hasta el final del método. Si el alcance es solo un bucle (como ese 'while'), se lanzará antes. E incluso una cadena nula asigna memoria: http://stackoverflow.com/a/6601485/1484750 –