Функционирование передачи значением по сравнению с передачей ссылкой в.NET C#

Я создал легкий класс с конструктором, который берет приблизительно 10 параметров. Класс не изменяет значения параметров; это просто хранит значения локально через конструктора.

Некоторые параметры являются ссылочными типами (строки, классы), и другие являются типами значения (интервал, bool, перечисления).

Мой вопрос, должен я передавать все параметры (кроме классов) через ссылку, т.е. использование ключевого слова ref?

Мое внимание здесь является производительностью.

19
задан plr108 20 November 2019 в 15:58
поделиться

5 ответов

Используйте ref , только если метод должен изменить параметры, и эти изменения необходимо передать в вызывающий код. Вам следует оптимизировать это только в том случае, если вы запустили его через профилировщик и определили, что узким местом действительно является CLR, копирующая параметры метода в стек.

Имейте в виду, что среда CLR сильно оптимизирована для вызова методов с параметрами, поэтому я не думаю, что это будет проблемой.

25
ответ дан 30 November 2019 в 03:02
поделиться

Нет. Для ссылочных типов вы уже передаете ссылку, нет необходимости передавать ссылку по ссылке, если только вы не хотите изменить то, на что указывает ссылка, например, присвоить ей новый объект. Для типов значений можно передавать по ссылке, но если у вас нет проблем с производительностью, я бы не стал этого делать. Особенно если рассматриваемые типы маленькие (4 байта или меньше), то выигрыш в производительности будет незначительным или вообще отсутствовать, возможно, даже будет штраф.

6
ответ дан 30 November 2019 в 03:02
поделиться

Насколько я понимаю, у вас есть класс с одними полями и конструктор, который присваивает параметры этим полям, верно?

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

2
ответ дан 30 November 2019 в 03:02
поделиться

Если класс хранит только параметры, может быть, стоит использовать struct?

Может быть, это представляет интерес?

Когда использовать struct?

3
ответ дан 30 November 2019 в 03:02
поделиться

Нет. Передача параметров по ссылке увеличивает накладные расходы, поэтому это только снизит производительность.

1
ответ дан 30 November 2019 в 03:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: