Como programador que no tiene una buena idea sobre la canalización de .NET, me preguntaba si el uso de cadenas de referencia como parámetros es bueno para el rendimiento en C#.
Digamos que tengo un método como este:
public int FindSomething(string text) { // Finds a char in the text and returns its index }Cuando uso este método, el compilador crea una copia del texto para el método, ¿verdad?
Pero si uso la palabra clave ref :
public int FindSomething(ref string text) { // Finds a char in the text and returns its index }.. el compilador solo debe enviar la dirección del puntero del texto...
Entonces, ¿es bueno para el rendimiento usar una ref como esta?
Cuando uso este método, el compilador crea una copia del texto para el método, ¿verdad?
No, no lo hace. string es un tipo de referencia, y el compilador creará una nueva variable de pila que apunta a la misma string representada en una dirección de memoria determinada. No copiará la cadena.
Cuando usa ref en un tipo de referencia, no habrá una copia del puntero a la string creada. Simplemente pasará la referencia ya creada. Esto es útil solo cuando desea crear una string completamente nueva:
void Main() { string s = "hello"; M(s); Console.WriteLine(s); M(ref s); Console.WriteLine(s); } public void M(string s) { s = "this won't change the original string"; } public void M(ref string s) { s = "this will change the original string"; }Entonces, ¿es bueno para el rendimiento usar una referencia como esta?
Las ganancias de rendimiento no serán perceptibles. Lo que sucederá es que otros desarrolladores se confundan sobre por qué usó ref para pasar la cadena.