Возврат по значению или по ссылке? - PullRequest
3 голосов
/ 31 января 2011

Если у нас есть два метода, один из которых возвращает переменную по значению, а другой по ссылке, который имеет наибольшую производительность?

myObj.Method1(out var);

или

var = myObj.Method2();

Полагаю, первая версия более эффективна, но означает ли это, что вы всегда должны создавать методы, которые возвращают значения по ссылке? Или есть ли причина возвращать переменные по значению?

Спасибо.

Ответы [ 3 ]

6 голосов
/ 31 января 2011

Разница в производительности будет неизмеримо мала или отсутствует.

Вы ошибочно полагаете, что две версии имеют разную семантику.
Для ссылочных типов оба метода будут копировать ссылку ровно один раз.

Для больших типов значений параметры out могут быть быстрее, поскольку вам не требуется отдельная временная локальная область.
Всегда измеряйте, прежде чем делать выводы !

Делатьне используйте out параметры, если вам не нужно возвращать 2 значения.

4 голосов
/ 31 января 2011

Нет абсолютно никакой разницы в производительности, если они относятся к типу ссылки.

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

1 голос
/ 31 января 2011

Различия между ссылочными типами (классами) будут минимальными или незначительными, поскольку в обоих случаях это значение возвращается по ссылке.

Для типов значений (структур) может быть разница, если тип содержит много полей, в этом случае возврат с использованием параметра out происходит немного быстрее.

...