Использует ключевое слово 'ref' для строковых параметров в методах, хороших для производительности на С#?

Как программист, у которого нет хорошей идеи о конвейере .NET, мне было интересно, если использовать строки ссылок в качестве параметров для производительности на С#?

Скажем, у меня есть такой способ:

public int FindSomething(string text)
{
    //Finds a char in the text and returns its index
}

Когда я использую этот метод, компилятор создает копию текста для метода, правильно?

Но если я использую ключевое слово ref:

public int FindSomething(ref string text)
{
    //Finds a char in the text and returns its index
}

.. компилятор должен отправлять только адрес текстового указателя...

Как это хорошо для производительности с помощью ref, как это?

Ответ 1

Когда я использую этот метод, компилятор создает копию текста для метода, правильно?

Нет, это не так. string является ссылочным типом, и компилятор создаст новую переменную стека, которая указывает на тот же самый string, представленный на заданном адресе памяти. Он не будет копировать строку.

Когда вы используете ref для ссылочного типа, копия указателя на string не будет создана. Он просто передаст уже созданную ссылку. Это полезно, только если вы хотите создать совершенно новый string:

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";
}

Как это хорошо для производительности, используя ref, как это?

Прирост производительности не будет заметным. Что произойдет, другие разработчики путаются относительно того, почему вы использовали ref для передачи строки.