2009-09-10 8 views
5

Si tengo código como este:Declaración de variables lo más tarde posible y pasando método que vuelve como un parámetro

string s = MyClass.GetString(); // Returns string containing "hello world"; 
ProcessString(s); 

¿Es esta la más lenta de lo?

ProcessString(MyClass.GetString()); 

Si es así, ¿por qué? En el segundo ejemplo, el compilador generalmente crea una variable de GetString(); método que devuelve una cadena?

Además, ¿cuál es la ventaja de declarar las variables lo más tarde posible? ¿Esto beneficia a la GC? Si es así, ¿cómo (estoy asumiendo en términos de GC gens)?

Gracias

Respuesta

10

No, el compilador emitirá IL idéntico para ambos de estos ejemplos (no todos ejemplos como este, eso sí, solo este ejemplo concreto).

Recuerde que todas las variables locales en C# se empacan juntas en el IL en la parte superior del método, por lo que realmente no importa cuando las declare, ya que el CLR asignará espacio para ellas al ingresar el método.

La ventaja de declarar las variables lo más tarde posible es únicamente para mejorar la legibilidad de su código. Declarar variables lo más cerca posible de donde se utilizan permite a los lectores de su código obtener información contextual sobre lo que es la variable y lo hace más allá del nombre de la variable solo.

+0

Gracias. Entonces, para los dos ejemplos de código, son prácticamente iguales bajo el capó. Entiendo completamente tu respuesta en mi segunda consulta. :) – dotnetdev

+0

Si declara variables en la parte superior del bloque, luego asigne a ellas más adelante, está llamando innecesariamente a su constructor predeterminado. Probablemente no sea un gran problema en la mayoría de los casos. –

+0

George V. Reilly dijo "Si declaras variables en la parte superior del bloque, luego les asignas más adelante, estás llamando innecesariamente a su constructor predeterminado", pero esto solo es cierto en C++. La pregunta fue etiquetada como C# y no se llamó a ningún constructor en este caso. La referencia simplemente tiene el valor nulo. – alexk7

Cuestiones relacionadas